hdu 5918 Sequence I (CCPC长春,KMP)
2016-10-06 12:51
441 查看
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=5918
题意:
给你a,b两个序列和一个p ,求有多少个 q恰好满足 b1,b2,b3….bm 等于a[q],a[q+p],a[q+2p]……a[q+(m-1)p];
分析:
将a序列,每隔p位置分成一组,这样最多有p组,个数和是n
将每组和b序列跑kmp计算答案
这题暴力也能A
代码:
题意:
给你a,b两个序列和一个p ,求有多少个 q恰好满足 b1,b2,b3….bm 等于a[q],a[q+p],a[q+2p]……a[q+(m-1)p];
分析:
将a序列,每隔p位置分成一组,这样最多有p组,个数和是n
将每组和b序列跑kmp计算答案
这题暴力也能A
代码:
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int s ,t ,slen,tlen,p; int nex ; void getnex() { int j=0,k; k=nex[0]=-1; while(j<tlen) { if(k==-1||t[j]==t[k])nex[++j]=++k; else k=nex[k]; } } vector<int>g ; int main() { int T; //freopen("f.txt","r",stdin); scanf("%d",&T); for(int cas=1; cas<=T; cas++) { scanf("%d%d%d",&slen,&tlen,&p); for(int i=0; i<slen; i++)scanf("%d",&s[i]); for(int i=0; i<tlen; i++)scanf("%d",&t[i]); for(int i=0; i<p; i++)g[i].clear(); for(int i=0; i<slen; i++)g[i%p].push_back(s[i]); getnex(); int ans=0; for(int k=0; k<p; k++) { int j=0; for(int i=0; i<g[k].size(); i++) { while(j&&g[k][i]!=t[j])j=nex[j]; if(g[k][i]==t[j])j++; if(j==tlen) { ans++; j=nex[j]; } } } printf("Case #%d: %d\n",cas,ans); } return 0; }
相关文章推荐
- HDU 5918 Sequence I (2016-ccpc-长春)
- HDU 5918 Sequence I (2016长春区域赛, KMP)
- HDU 5918 Sequence I CCPC 长春 暴力求解
- HDU 5918 Sequence I【KMP?】【2016中国大学生程序设计竞赛(长春)】
- HDOJ 5918 Sequence I 【2016CCPC长春现场赛】KMP暴力
- 2016 ccpc长春现场赛I Sequence I(hdu 5918)
- HDU - 5918 Sequence I解题报告(KMP)
- [HDU 5918] Sequence I (kmp)
- HDU 5918 Sequence I (kmp)
- 【KMP+优化】HDU 6153/CCPC 1003 A Secret
- hdu 5918 Harmonic Value Description 2016ACM/CCPC长春赛区现场赛H
- hdu 5918 暴力kmp
- HDU 5916 Harmonic Value Description (2016-ccpc-长春)
- 【hdu 5918】Sequence I(KMP)
- HDU-5918:Sequence I(KMP)
- 2013长春网赛1005 hdu 4763 Theme Section(kmp应用)
- HDU 5918 kmp
- hdu 5442 Favorite Donut 最小表示法+KMP 2015长春网络赛
- HDU 5442 Favorite Donut(最大表示法 + KMP 2015长春网络赛)
- hdu-5918 Sequence I(kmp)