数据结构实验之串三:KMP应用
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数?
Input
首先输入一个整数n,代表有n个小朋友。下一行输入n个数,分别代表每个小朋友手里糖的数量。
之后再输入一个整数m,代表下面有m个数。下一行输入这m个数。
Output
如果能唯一的确定一对l,r的值,那么输出这两个值,否则输出-1
Example Input
5 1 2 3 4 5 3 2 3 4
Example Output
2 4
DQE:
KMP算法的简单应用,注意本题要求有唯一解,熟悉判断唯一解的方法即可,水题++;
#include <iostream> #include <cstdio> void cnext(int *y,int *next) { ,j=; next[i]=j; ]) { ||y[i]==y[j]) { i++; j++; next[i]=j; } else { j=next[j]; } } } int kmp(int *x,int *y,int *next,int pos) { ; ]&&j<=y[]) { ||x[i]==y[j]) { i++; j++; } else { j=next[j]; } } ]) ]; ; } int main() { ],y[]; ]; int i,j; while(scanf("%d",x)!=EOF) { ;i<=x[];i++) { scanf("%d",&x[i]); } scanf("%d",y); ;i<=y[];i++) { scanf("%d",&y[i]); } cnext(y,next); i=kmp(x,y,next,); ) { j=kmp(x,y,next,+i); ) { printf(]-); } else { printf("-1\n"); } } else { printf("-1\n"); } } ; } /*************************************************** User name: *** Result: Accepted Take time: 172ms Take Memory: 1304KB Submit time: 2016-11-02 21:35:25 ****************************************************/