HDU 1711 Number Sequence(算法验证)
該怎么做、每一個人的人生都應該自己掌握、你給不了別人一切、你也不懂別人的憂傷、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 微笑不代表快樂、哭泣不一定悲傷
? ? ? ? ? ? ? ?不努力怎么讓關心你的人幸福、不努力怎么讓看不起你的人絕望、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 我用生命在奮斗——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; }
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/yxwkf/p/4639238.html
總結
以上是生活随笔為你收集整理的HDU 1711 Number Sequence(算法验证)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-----单例模式
- 下一篇: HTTP/2笔记之连接建立