HDU 5918 Sequence I kmp算法+虽然暴力也能过
来源:互联网 发布:枪口动能计算器软件 编辑:程序博客网 时间:2024/05/16 04:42
Sequence I
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 211 Accepted Submission(s): 90
Problem Description
Mr. Frog has two sequences a1,a2,⋯,an and b1,b2,⋯,bm and a number p. He wants to know the number of positions q such that sequence b1,b2,⋯,bm is exactly the sequence aq,aq+p,aq+2p,⋯,aq+(m−1)p where q+(m−1)p≤n and q≥1 .
Input
The first line contains only one integer T≤100 , which indicates the number of test cases.
Each test case contains three lines.
The first line contains three space-separated integers1≤n≤106,1≤m≤106 and 1≤p≤106 .
The second line contains n integersa1,a2,⋯,an(1≤ai≤109) .
the third line contains m integersb1,b2,⋯,bm(1≤bi≤109) .
Each test case contains three lines.
The first line contains three space-separated integers
The second line contains n integers
the third line contains m integers
Output
For each test case, output one line “Case #x: y”, where x is the case number (starting from 1) and y is the number of valid q’s.
Sample Input
26 3 11 2 3 1 2 31 2 36 3 21 3 2 2 3 11 2 3
Sample Output
Case #1: 2Case #2: 1
Source
2016中国大学生程序设计竞赛(长春)-重现赛
解题思路:
1,字符串匹配,只是文本串每次移动p位而已
2,然后就是要注意,以前kmp做字符转匹配的时候,模式串的p[m]位置是有'\0'的,然而变成数组的时候
要保证p[m]=0即可,也就是要memset模式串。
3,其实这题数据非常的水,当时暴力n^2的复杂度都能过。(不知道后来数据会不会加强)
解题思路:
1,字符串匹配,只是文本串每次移动p位而已
2,然后就是要注意,以前kmp做字符转匹配的时候,模式串的p[m]位置是有'\0'的,然而变成数组的时候
要保证p[m]=0即可,也就是要memset模式串。
3,其实这题数据非常的水,当时暴力n^2的复杂度都能过。(不知道后来数据会不会加强)
#include<bits/stdc++.h>using namespace std;const int maxn = 1000005 ;int f[maxn] ;int a[maxn] ;int b[maxn] ;int n,m,pp;int ans ;void find(int st,int *T,int *P){ int j = 0 ; for(int i=st;i<n;i+=pp){ while(j&&P[j]!=T[i]){j = f[j];} if(P[j]==T[i])j++ ; if(j==m){ ans++ ; //j = 0 ; } }}void getfail(int *p){ f[0] = 0 ; f[1] = 0 ; for(int i=1;i<m;i++){ int j = f[i] ; while(j&&p[i]!=p[j])j = f[j] ; f[i+1] = (p[i]==p[j] ? j+1 : 0) ; }}int main(){ int T,cas=1; scanf("%d",&T); while(T--){ ans = 0 ; scanf("%d%d%d",&n,&m,&pp); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=0;i<n;i++)scanf("%d",&a[i]); for(int i=0;i<m;i++)scanf("%d",&b[i]); //b[m]=0; getfail(b) ; for(int i=0;i<pp;i++){ find(i,a,b); } printf("Case #%d: %d\n",cas++,ans); } return 0;}
0 0
- HDU 5918 Sequence I kmp算法+虽然暴力也能过
- hdu 5918 Sequence I kmp算法
- HDU-5918 Sequence I(暴力)(KMP)
- hdoj 5918 Sequence I(kmp, 暴力?)
- hdu 5918 Sequence I (kmp)
- hdu 5918 Sequence I kmp
- HDU 5918 Sequence I (kmp)
- [HDU 5918] Sequence I (kmp)
- HDU-5918:Sequence I(KMP)
- poj 3080(3450) KMP(暴力也能过) 多个串的最长公共子串
- HDU 2328 Corporate Identity(发现新大陆之KMP专题不用KMP也能过系列)
- HDU 5918 Sequence I CCPC 长春 暴力求解
- hdu 5918 暴力kmp
- hdu 5918 Sequence I (CCPC长春,KMP)
- HDU 5918 Sequence I (2016长春区域赛, KMP)
- HDOJ 5918 Sequence I 【2016CCPC长春现场赛】KMP暴力
- HDOJ 5918 Sequence I(KMP)
- HDOj 5918 Sequence I【KMP】
- JZOJ 4810 【NOIP2016提高A组五校联考1】道路规划
- Java的反射基本概念、语法和应用
- 剑指offer_整数中1出现的次数
- Linux嵌入式开发常见面试题
- 同义词总结
- HDU 5918 Sequence I kmp算法+虽然暴力也能过
- 2016华为校招上机试题2——洞穴逃生
- 3. Longest Substring Without Repeating Characters
- 51.[Python]使用multiprocessing进行多进程编程
- 51nod 1007 正整数分组(01背包)
- Integer Replacement
- C 重写power函数 递归与循环
- Visual Basic 总结
- 有关指针(1)