大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
该怎么做、每一个人的人生都应该自己掌握、你给不了别人一切、你也不懂别人的忧伤、
微笑不代表快乐、哭泣不一定悲伤
不努力怎么让关心你的人幸福、不努力怎么让看不起你的人绝望、
我用生命在奋斗——lx_Zz
—————————————————————————————————————————————————————————————
————————————————————————— 华丽的切割线 ————————————————————————————
—————————————————————————————————————————————————————————————
10678686 | 2014-05-05 03:11:35 | Accepted | 1711 | 468MS | 4224K | 1865 B | C++ |
经过验证、发现我刚刚YY的算法目測是正确的、、O(∩_∩)O哈哈~效果还不错。。
。→_→
淡淡改了一下、毕竟都是类似的题、废话不多说、直接上代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int str1[10005];int str2[1000005];int next[10005];int main(){ int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&str2[i]); for(int i=0;i<m;i++) scanf("%d",&str1[i]); int len1=m; next[0]=-1; for(int i=1;i<len1;i++) { if(str1[i]==str1[next[i-1]]) { next[i]=next[i-1]+1; } else if(str1[i]==str1[0]) { next[i]=1; } else next[i]=0; } int len2=n; int ans=-1; int flag=0; for(int i=0,j=0;i<len2;) { int ff=0; if(str1[j]==str2[i]) { i++;j++; if(j>=len1) { ans=i-m+1; break; } } else { while(str1[j]!=str2[i]) { if(j==0) { ff=1; break; } j=next[j-1]; if(j==-1) { ff=1; break; } } if(ff) { if(str1[0]==str2[i]) { i++;j=1; } else { i++;j=0; } } } } printf("%d\n",ans); } return 0;}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117580.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...