Number Sequence

HDOJ-1711

1.这里使用的算法是KMP算法,pi数组就是前缀数组。

2.代码中使用到了一个技巧就是用c数组看成是复合字符串,里面加一个特殊整数位-1000006,因为它永远不会出现在数组中。

3.额外需要注意的就是,需要加快速输入输出语句,因为涉及到的数据量有点大,所以会超时,当然,也可以选用scanf也可以。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m;
int a[1000006],b[10004];
int pi[1000006];
int c[1010010];
void Pi(int len){
memset(pi,0,sizeof(pi));
int n=len;
pi[0]=0;
for(int i=1;i<n;i++){
int j=pi[i-1];
while(j>0&&c[i]!=c[j]){
j=pi[j-1];
}
if(c[i]==c[j])
j++;
pi[i]=j;
}
}
int main(){
ios::sync_with_stdio(false);//不加这两条语句会超时
cin.tie(0);
int t;
cin>>t;
while(t--){
cin>>n>>m;
int a1,b1;
for(int i=0;i<n;i++){
cin>>a[i];
c[i]=a[i];
}
for(int j=0;j<m;j++){
cin>>b[j];
c[j]=b[j];
}
c[m]=-1000006;
for(int i=m+1;i<n+m+1;i++){
c[i]=a[i-m-1];
}
Pi(m+n+1);
int ans=-1;
for(int i=m+1;i<n+1+m;i++){
//cout<<pi[i]<<endl;
if(pi[i]==m){
ans=i-(m-1)-(m+1);
ans++;
break;
}
}
cout<<ans<<endl;
}
return 0;
}

最新文章

  1. uiimage 上传 数据库
  2. percona-toolkit 之 【pt-heartbeat】说明
  3. iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
  4. 通过magento后台的magento connect安装magento extension
  5. C#中 ? 和?? 的用法
  6. Failed to create java virtue machine(不能创建java虚拟机)
  7. YII 小部件实现的注册表
  8. Mp3tag(MP3文件信息修改器) V2.79a 多语绿色版
  9. C++ 头文件系列(stdexcept)
  10. Docker系列07—Dockerfile 详解
  11. Seq2Seq ---学习笔记
  12. RS485转USB插电脑上通讯不上
  13. 2、CentOS下编译安装Python2.7.6(转)
  14. Little Red Riding Hood
  15. 深度学习word embedding猜测性别初探
  16. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
  17. Python3入门(十一)——IO编程
  18. vmware安装——CentOS-6.5和Mysql
  19. linux netstat查看服务和端口状态
  20. Mysql优化分页

热门文章

  1. Codeforces Round #695 (Div. 2) C. Three Bags (贪心,思维)
  2. VJ train1 I-彼岸
  3. Codeforces Round #670 (Div. 2) B. Maximum Product (暴力)
  4. vs2019激活码
  5. 7.PowerShell DSC之模式
  6. 关于HashMap遍历,为什么要用entry
  7. c# 类(4)
  8. bzoj5312 冒险(吉司机线段树)题解
  9. mssql数据库提权(xp_cmdshell)
  10. npm version ^ meaning