xmu1451kmp
2016-04-11 21:01
288 查看
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1451
给出两个长度相同的串 问能否经过移动是两串相等 abcd->bcda
输出移动的长度
可以将第一个串重复一下变成两倍当做文本串,用另一个去匹配
给出两个长度相同的串 问能否经过移动是两串相等 abcd->bcda
输出移动的长度
可以将第一个串重复一下变成两倍当做文本串,用另一个去匹配
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=200010; char s[maxn<<1],t[maxn]; int nex[maxn],flag,f; void get_next(int len) { int i=0,j=-1; nex[0]=-1; while(i<len) { if(j==-1||t[i]==t[j]) { i++,j++; nex[i]=j; } else j=nex[j]; } } void kmp(int len1,int len2) { int i=0,j=0; get_next(len1); while(i<len1) { if(j==0||s[i]==t[j]) { i++;j++; } else j=nex[j]; if(j==len2) { f=i; flag=1; break; } } } int main() { while(~scanf("%s%s",s,t)) { int len1=strlen(s); int len2=strlen(t); for(int i=0;i<len1;i++) s[i+len1]=s[i]; flag=0; kmp(len1<<1,len2); cout<<flag<<endl; if(flag) printf("%d\n",(2*len1-f)%len1);//这里原来写f-len1,wa而且也没取余 没想清楚 else puts("-1"); } return 0; }
相关文章推荐
- Python实现Json结构对比的小工具兼谈编程求解问题
- DNS简析
- Ruby gem 更换国内源
- 【Git】管理多个ssh私钥实践(以github为例)
- 深入讲解WebView
- 浏览器加载和渲染html的顺序(html/css/js)
- 适合温州地区五金行业的管理软件
- 计算机网络面试
- android ksoap调用webservice批量上传多张图片
- 浏览器加载和渲染html的顺序(html/css/js)
- 4、理解ros话题
- 文字超链接—布局实现和代码实现
- C++第三次作业
- UWP开发入门(十一)——Attached Property的简单应用
- 周总结五
- 一天一个Java基础——数组
- bash_shell
- C++对象的生存周期
- 山东省第一届ACM省赛 G SDUT 2157 Greatest Number(暴力枚举)
- Django 大文件下载