hdu——1711Number Sequence(kmp专练)
2016-05-04 23:03
337 查看
Number Sequence
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19556 Accepted Submission(s): 8389
Problem Description
Given two sequences of numbers : a[1], a[2], ...... , a
, and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M]. If there are more than one
K exist, output the smallest one.
Input
The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate a[1], a[2], ...... , a
.
The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].
Output
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
Sample Input
2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1
Sample Output
6
-1
Source
HDU 2007-Spring Programming Contest
Recommend
lcy
可以用单个数字输入抵消空格的影响 不直接用string 进行kmp算法
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19556 Accepted Submission(s): 8389
Problem Description
Given two sequences of numbers : a[1], a[2], ...... , a
, and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M]. If there are more than one
K exist, output the smallest one.
Input
The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate a[1], a[2], ...... , a
.
The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].
Output
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
Sample Input
2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1
Sample Output
6
-1
Source
HDU 2007-Spring Programming Contest
Recommend
lcy
可以用单个数字输入抵消空格的影响 不直接用string 进行kmp算法
#include<iostream> #include<string> #include<cstring> using namespace std; int nexta[4000100]; int a[1000100],b[1000010];//a是子串b是模板 void getnext(int a[],long long h) { int i=0,j=-1; nexta[0]=-1; while(i<h) { if(j==-1||a[i]==a[j]) { ++i; ++j; nexta[i]=j; } else j=nexta[j]; } } long long kmp(int a[],long long h,int b[],long long k) { int i=0,j=0; while(i<k) { if(a[j]==b[i]||j==-1) { ++i; ++j; } else j=nexta[j]; if(j==h) { return i-h+1;//从0开始的 } } return -1; } int main() { long long h,k,i,n; ios::sync_with_stdio(false); cin>>n; while(n--) { cin>>k>>h; for(i=0;i<k;i++) cin>>b[i]; for(i=0;i<h;i++) cin>>a[i]; getnext(a,h); cout<<kmp(a,h,b,k)<<endl; } return 0; }
相关文章推荐
- Java集合的Stack、Queue、Map的遍历
- UITableView 01
- 347. Top K Frequent Elements-获得前K高次元素
- UIWindow
- iOS开发报错CUICatalog: Invalid asset name supplied: (null)
- UI进阶 数据处理之文件读写
- Rescue HDU1242 (BFS+优先队列)
- FZU 2037 Maximum Value Problem【递推】
- This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 错误解决
- POJ 2524 Ubiquitous Religions
- 让多语言本地化变得更简单的Xcode插件——AMLocalizedStringBuilder
- 【arduino】通过Esp8266-01模块实现的WiFi通信(2)与电脑的连接和烧写
- "围观"设计模式(9)--创建型之创建者模式(Builder Pattern)
- [暴力] BZOJ 3917 [Baltic2014]sequence
- 关于valueOf和toString
- UIMotionEffect和Home页背景视差效果
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- Android 中的UI第一篇:Common Layout
- 聊一聊CommonJS,Requirejs,SeaJS,AMD,CMD之间需要理清的关系
- The Donkey of Gui Zhou驴和老虎是否相遇问题(hdu4704)