FZU 1901 Period II
来源:互联网 发布:游禧科技有限公司知乎 编辑:程序博客网 时间:2024/06/06 00:06
题目大意:给出一个字符串,要求找出所有的p,使得说s[i] = s[i+p] (i < len - p - 1)。
解题思路:其实就是求所有的前缀后缀串,p =len, 然后一直循环p = a[p]; 直到p = 0,其他的p值,字符串长度len- p都是答案。
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <algorithm>#include <map>#include <cmath>#include <queue>#include <string>using namespace std;const int maxn=1000005;char str[maxn];int a[maxn];int b[maxn];int n;void init(int len){ int i=-1,j=0; a[0]=-1; while(j<len) { if(i==-1||str[i]==str[j]) { ++i,++j; a[j]=i; } else i=a[i]; }}int main(){ int t; int num=1; scanf("%d",&t); while(t--) { int cnt=0; int k=0; scanf("%s",str); int len=strlen(str); init(len); int i=a[len]; b[k++]=len-i; while(i!=0) { cnt++; i=a[i]; b[k++]=len-i; } cnt++; printf("Case #%d: %d\n",num++,cnt); for(int i=0;i<k;i++) printf("%d%c",b[i],i==k-1?'\n':' '); } return 0;}
END!!!!!!!!!!!!!!!!!!!!!!!
3 0
- fzu 1901 Period II
- FZU 1901 Period II
- FZU 1901 Period II
- FZU 1901 Period II
- FZU 1901Period II
- fzu 1901 Period II(KMP)
- FZU Problem 1901 Period II
- FZU 1901 Period II (KMP)
- fzu 1901 Period II (KMP)
- FZU 题目1901 Period II (KMP)
- FZU 1901 Period II (kmp)
- FZU 1901 Period II (KMP+技巧)
- FZU 1901 Period II(KMP)
- FZU - 1901 Period II(KMP next数组的理解)
- fzuProblem 1901 Period II
- FZU1901 Period II
- FZU 1603 Checkers II
- FZU 1888三角形问题II
- 如何去掉字符串的空格/换行/回车
- linux shell 和 vim快捷键
- 【工具使用】LINUX下VSFTP的配置
- Android Studio2.1.2出现Souces for android “api 23 platform” not found错误
- Quartz教程三:Job与JobDetail介绍
- FZU 1901 Period II
- Servlet---用户注册小项目(用户注册和删除)
- 浅析 php each 函数
- UVA - 10534
- 用Sublime 3作为React Native的开发IDE
- iOS 中的通信方式
- css颜色+内联框架+嵌字矩形框
- OAuth2.0认证说明
- MySQL 数据库性能优化之索引优化