HDOJ-1711(KMP算法)
2024-09-07 11:04:43
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;
}
最新文章
- uiimage 上传 数据库
- percona-toolkit 之 【pt-heartbeat】说明
- iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
- 通过magento后台的magento connect安装magento extension
- C#中 ? 和?? 的用法
- Failed to create java virtue machine(不能创建java虚拟机)
- YII 小部件实现的注册表
- Mp3tag(MP3文件信息修改器) V2.79a 多语绿色版
- C++ 头文件系列(stdexcept)
- Docker系列07—Dockerfile 详解
- Seq2Seq ---学习笔记
- RS485转USB插电脑上通讯不上
- 2、CentOS下编译安装Python2.7.6(转)
- Little Red Riding Hood
- 深度学习word embedding猜测性别初探
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
- Python3入门(十一)——IO编程
- vmware安装——CentOS-6.5和Mysql
- linux netstat查看服务和端口状态
- Mysql优化分页
热门文章
- Codeforces Round #695 (Div. 2) C. Three Bags (贪心,思维)
- VJ train1 I-彼岸
- Codeforces Round #670 (Div. 2) B. Maximum Product (暴力)
- vs2019激活码
- 7.PowerShell DSC之模式
- 关于HashMap遍历,为什么要用entry
- c# 类(4)
- bzoj5312 冒险(吉司机线段树)题解
- mssql数据库提权(xp_cmdshell)
- npm version ^ meaning