博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5918 SequenceI (2016 CCPC长春站 KMP模版变形)
阅读量:4880 次
发布时间:2019-06-11

本文共 1324 字,大约阅读时间需要 4 分钟。

  这个题目的数据应该是比较弱的,赛场上的时候我们暴力也过了,而且我的kmp居然比暴力还要慢…… 这个变形并不难,跳着选数,把漏掉的位置补上就可以了。

  代码如下:

#include
#include
#include
#include
#include
using namespace std;#define N 1000005int a[N],b[N],Next[N],n,m,q;void getNext(){ int j, k; j = 0; k = -1; Next[0] = -1; while(j < m) if(k == -1 || b[j] == b[k]) Next[++j] = ++k; else k = Next[k];}int kmp(int start){ int ans = 0; int i,j = 0; for(i = start; i < n; i+=q) { while(j > 0 && a[i] != b[j]) j = Next[j]; if(a[i] == b[j]) j++; if(j == m) { ans++; j = Next[j]; } } return ans;}int main(){ int t,ans,ca=0; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&q); for(int i = 0; i < n; i++) { scanf("%d",&a[i]); } for(int i = 0; i < m; i++) { scanf("%d",&b[i]); } getNext(); ans = 0; if((m-1)*(q-1)+m <= n) { for(int i = 0; i < q; i++) { ans += kmp(i); } } printf("Case #%d: %d\n",++ca,ans); } return 0;}

 

转载于:https://www.cnblogs.com/jifahu/p/5932521.html

你可能感兴趣的文章
部署core
查看>>
mysql 时间设置
查看>>
如何在 Xcode 中修改应用的名字
查看>>
有关交换机——熟悉原理是必须的【转载】
查看>>
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
查看>>
【转】Android 读取doc文件
查看>>
js 数据绑定
查看>>
jsp的C标签一般使用方法以及js接收servlet中的对象及对象数字
查看>>
H5 简介
查看>>
window.frameElement的使用
查看>>
nl命令
查看>>
如何使用jQuery $.post() 方法实现前后台数据传递
查看>>
Using Flash Builder with Flash Professional
查看>>
jsp/post中文乱码问题
查看>>
C# 插入或删除word分页符
查看>>
数据库数据的查询----连接查询
查看>>
找不到可安装的ISAM ,asp.net读取数据丢失,解决的一列里有字符与数字的
查看>>
Java学习笔记三(对象的基本思想一)
查看>>
Java程序(文件操作)
查看>>
KMP算法 最小循环节 最大重复次数
查看>>