#include <bits/stdc++.h>
using namespace std;
typedef long long
LL;
const int
MAX=1000010;
int
n,m;
int
a[MAX],b[MAX];
int
nextval[MAX];
LL ans;
void
get_next(int b[],int m)
{
int
i=0;
nextval[0]=-1;
int
j=-1;
while(
i<m)
{
if(
j==-1||b[i]==b[j])
{
++
i;
++
j;
// if(b[i]==b[j])
// nextval[i]=nextval[j];
// else
nextval[i]=j;
}
else

j=nextval[j];
}
}
int
KMP(int a[],int n,int b[],int m,int nextval[],int pos,int p)
{
int
i=pos;
int
j=0;
while(
i<n)
{
if(
j==-1||a[i]==b[j])
{

i+=p;
j++;
if(
j==m)
{

j=nextval[j];
ans++;
}
}
else

j=nextval[j];
}
}
int main()
{
int
t,i,j;
int
cas=1;
scanf("%d",&t);
while(
t--)
{
int
p;
ans=0;
scanf("%d%d%d",&n,&m,&p);
for(
i=0; i<n; ++i)
scanf("%d",&a[i]);
for(
j=0; j<m; ++j)
scanf("%d",&b[j]);
get_next(b,m);
// for(i=0; i<m; i++)
// printf("%d ",nextval[i]);
for(i=0;i<p;i++)
{
if(
i+(m-1)*p>=n)
break;

KMP(a,n,b,m,nextval,i,p);
}

printf("Case #%d: %lld\n",cas++,ans);
}
return
0;
}

HDU5918【KMP大法好,虽然我不会】的更多相关文章

  1. HDU5918(KMP)

    Sequence I Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. 2018.09.18 atcoder Best Representation(kmp)

    传送门 思路简单不知为何调试了很久. 显然要么分成n个(所有字符相同),要么分成1个(原字符串无循环节),要么分成两个(有长度至少为2的循环节). 一开始以为可以直接hash搞定. 后来wa了几次之后 ...

  3. [LeetCode] Add Bold Tag in String 字符串中增添加粗标签

    Given a string s and a list of strings dict, you need to add a closed pair of bold tag <b> and ...

  4. 「UVA1328」Period 解题报告

    English题面 题意: 给你一个长度为n的字符串,依次取字符串前i个(前缀),如果前缀由k(k>0)个相同真子串构成,那么输出i和k 直到n为0结束,每组数据后要有一行空白 思路: KMP+ ...

  5. HDU 1711 Number Sequence(KMP裸题,板子题,有坑点)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Hash大法

    内容参考<算法竞赛进阶指南> 之前集训的时候听老师讲过,字符串题目中,hash一般不是正解,但是是一个优秀的暴力,可以拿比较多的部分分. hash涉及内容很多,这里只讨论字符串hash 可 ...

  7. KMP——从入门到不会打题

    KMP——从入门到不会打题 前言 如果你不了解哈希,建议先观看本蒟蒻的另一篇博客,对哈希有一定的理解   哈希大法吼 KMP算法,别名烤馍片或者看毛片,由烤馍片男子天团三位神犇同时发现的一种强大的单模 ...

  8. Connect() 2016 大会的主题 ---微软大法好

    文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ...

  9. KMP算法求解

    // KMP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespac ...

随机推荐

  1. 使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...

  2. android开发——自己定义相机(Camera)开发总结

    近期这段时间我一直在开发自己定义相机.谷歌了些网上的demo.发现有非常多各种各样的问题.终于还是从API的camera类開始学习,进行改进. 以下对之前的实现进行一些总结. 官方camera API ...

  3. 提高sqlite 的运行性能(转载)

    原文地址: https://blog.devart.com/increasing-sqlite-performance.html One the major issues a developer en ...

  4. javascript 中 "undefined" 与 "is not defined" 分析

      var var1; console.log( typeof var0);//print "undefined",主要看下面对var0单独的输出 console.log( typ ...

  5. SAM4E单片机之旅——6、LED闪烁之按钮控制

    现在试试用按钮控制LED灯……让LED在一个按钮按下时亮起:弹起时灭掉. 主要目的是学习GPIO的输入及中断. 一. 电路 图中的J39-n是几个跳线插座,位置在开发板LCD附近,往下进行前要先确保跳 ...

  6. java的一个简单死锁的例子

    package com.deadlock; /* * 演示死锁:(由毕向东视频所得) * 一种解释:Thread—0拿到lock1锁,Thread—1拿到lock2锁,Thread—0想要lock2锁 ...

  7. 调用Windows API实现GBK和UTF-8的相互转换

    GBK转UTF-8示例 GbkToUtf8.cpp #include <Windows.h> #include <iostream> #include <string&g ...

  8. Block浅析一

    1.在Block结构体中含有isa指针,这就证明了Block其实就是对象,并具有一般对象的所有功能. 2.Block是OC中的一种数据类型,在iOS开发中被广泛使用. 3.block的应用 (1)遍历 ...

  9. 分布式版本控制系统—git命令

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  10. POJ1456 Supermarket —— 贪心 + 路径压缩优化

    题目链接:http://poj.org/problem?id=1456 Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Subm ...