hdu5422 最大表示法+KMP
2015-09-15 17:00
281 查看
#include <iostream> #include <algorithm> #include <string.h> #include <cstdio> #include <vector> using namespace std; const int maxn=20005; int MaxRepresstation(char * S, int len ) { int i = 0, j = 1, k = 0; while(i < len && j < len) { k = 0; while(k < len && S[(i + k)%len] == S[(j + k)%len]) k++; if(k >= len) break; if(S[(i + k)%len] > S[(j + k)%len]) j = max(i + 1, j + k + 1); else i = max(i + k + 1, j + 1); } return min(i ,j); } char s[maxn]; char s2[maxn*2]; char s3[maxn]; int F[maxn]; void getFail(char *P, int *f, int m) { f[0]=0;f[1]=0; for(int i=1; i<m; i++) { int j=f[i]; while(j&&P[i]!=P[j])j=f[j]; f[i+1]=P[i]==P[j]?j+1:0; } } int find(char *T, char *P, int *f, int n, int m) { getFail(P,f,m); int j=0; int ans=0; for(int i=0; i<n; i++) { while(j&&P[j]!=T[i]) j=f[j]; if(P[j]==T[i])j++; if(j==m){ ans=max(ans,i-m+1); j=f[j]; } } return ans; } int main() { int cas; scanf("%d",&cas); for(int cc=1; cc<=cas; cc++) { int n; scanf("%d",&n); scanf("%s",s); int d1=MaxRepresstation(s,n); for(int i=0; i<n;i++) s2[i]=s[n-1-i]; int d2=MaxRepresstation(s2,n); for(int i=0; i<n; i++) { s3[i]=s2[(d2+i)%n]; s2[i+n]=s2[i]; } d2=find(s2,s3,F,n*2-1,n); d2 = n-1-d2; int f=-1,ans=-1; for(int i=0; i<n; i++) { int x1=(d1+i)%n,x2=(d2-i+n)%n; if(s[x1]==s[x2])continue; if(s[x1]>s[x2]){ ans=d1; f=0; break; }else{ ans=d2; f=1; break; } } if(f==-1){ if(d1<=d2){ ans=d1; f=0; }else{ ans=d2; f=1; } } printf("%d %d\n",ans+1,f); } return 0; }
相关文章推荐
- js+flash实现,单击按钮复制文本框内容
- Can't connect to local MYSQL server through socket /var/lib/mysql/mysql.sock
- Codevs 1014 装箱问题
- android仿ios时间控件
- mvc:annotation-driven与context:annotation-config -- AnnotationDrivenBeanDefinitionParser
- 欢迎使用CSDN-markdown编辑器
- linux下查看已经安装的jdk 并卸载jdk
- iOS开发之 滚动视图 + 页面控件(UIScrollView + UIPageControl)
- 学习Linux第二天
- 运维工程师的职责和前景
- SQL SERVER 截取字符串常用函数
- java+android须知环境变量配置
- Android 多分辨率自适应总结
- iphone程序中实现截屏的一种方法
- 一个很详细的web.xml讲解
- 判断一个字符是否是另一个字符的旋转字符串
- 个人博客作业Week1
- 新版本来袭:Apache Spark 1.5新特性介绍
- 【Android技术整理】XML生成与解析伪代码
- 第3周实践项目--顺序表的基本运算(2)