最大最小表示法与KMP求循环节

最大最小表示法

最大最小表示法与KMP求循环节的模板题,

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
const int MAXN=2000005;
int init(){
int rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return fh*rv;
}
char s[MAXN],s1[MAXN],s2[MAXN];
int nxt[MAXN];
int MINR(){
int i=0,j=1;
int len=strlen(s)/2;
while(i<len&&j<len){
int k=0;
while(s[i+k]==s[j+k]&&k<len) k++;
if(k==len) break;
if(s[i+k]>s[j+k]) i=max(i+k+1,j+1);
else j=max(j+k+1,i+1);
}
int ans=min(i,j);
for(int i=0;i<len;i++) s1[i]=s[i+ans];
s1[len]='\0';
return ans+1;
}
int MAXR(){
int len=strlen(s)/2;
int i=0,j=1;
while(i<len&&j<len){
int k=0;
while(s[i+k]==s[j+k]&&k<len) k++;
if(k==len) break;
if(s[i+k]<s[j+k]) i=max(i+k+1,j+1);
else j=max(j+k+1,i+1);
}
int ans=min(i,j);
for(int i=0;i<len;i++) s2[i]=s[i+ans];
s2[len]='\0';
return ans+1;
}
void getnxt(char a[]){
nxt[0]=-1;
int k=-1,j=0;
int len=strlen(a);//cout<<endl;cout<<len<<" 1"<<endl;
while(j<len) if(k==-1||a[k]==a[j]) nxt[++j]=++k;
else k=nxt[k]; }
int kmp(char a[]){
getnxt(a);
int len=strlen(a);
int ans=len-nxt[len];
if(len==ans) return 1;
if((len%ans)==0) return len/ans;
else return 1;
}
int main(){
freopen("in.txt","r",stdin);
while(~scanf("%s",s)){
int len=strlen(s);
for(int i=0;i<len;i++) s[len+i]=s[i];
s[len*2]='\0';
int r1=MINR(),r2=MAXR();
printf("%d %d %d %d\n",r1,kmp(s1),r2,kmp(s2));
//cout<<s1<<s2<<endl;
}
fclose(stdin);
return 0;
}

HDU 3374 String Problem的更多相关文章

  1. HDU 3374 String Problem (KMP+最大最小表示)

    HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  2. HDU 3374 String Problem(KMP+最大/最小表示)

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. HDU - 3374 String Problem (kmp求循环节+最大最小表示法)

    做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...

  4. HDU 3374 String Problem (KMP+最小最大表示)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3374 [题目大意] 给出一个字符串,求出最小和最大表示是从哪一位开始的,并且输出数量. [题解] ...

  5. hdu 3374 String Problem(kmp+最小表示法)

    Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...

  6. HDU 3374 String Problem(KMP+最大(最小)表示)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多 ...

  7. hdu 3374 String Problem (kmp+最大最小表示法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...

  8. hdu 3374 String Problem(最小表示法+最大表示法+kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给出一个字符串问这个字符串最小表示的最小位置在哪,还有有几个最小表示的串.最大表示的位置在 ...

  9. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374   KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html   循环节推导的证明相当 ...

  10. HDU - 3374:String Problem (最小表示法模板题)

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

随机推荐

  1. 总结过滤器,监听器,servlet的异同点,已经执行顺序。

    1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml ...

  2. Xshell无法连接到LINUX虚拟机

    首先与遇到的情况是,在虚拟机下安装了Linux后,xshell无法连接远程的虚拟机. 我遇到的情况是虚拟机可以ping 主机,主机确ping不了虚拟机. 使用的VM设置了两个网卡,一个nat  一个h ...

  3. 安装linux的关键步骤

  4. BLE空中升级 谈(二)

    BLE 空中升级谈 -- CC2541 的产品开发中OAD注意事项(续) TI CC2541支持多个硬件,多个软件对它进行空中升级,可以有不同的组合,硬件有 编号 名称 Hex 用法 1 Cc2540 ...

  5. CSS中的定位与浮动

    CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...

  6. JAVA:成员变量和局部变量的区别

    1.作用于不同: 局部变量的作用域仅限于定义它的方法 成员变量的作用域在整个类的内部都是可见的 2.初始值不同 JAVA会给成员变量一个初始值 JAVA不会给局部变量赋予初始值 3.在同一个方法中,不 ...

  7. dede表前缀不定时,查询表#@__archives

    $query = "SELECT arc.*,tp.typedir,tp.typename,               tp.isdefault,tp.defaultname,tp.nam ...

  8. 版本控制——TortoiseSVN (4)多版本并行开发 B

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  9. 图文教程:在Mac上搭建Titanium的iOS开发环境

    http://mobile.51cto.com/web-317170_all.htm 跨平台开发工具Titanium的兴起之路:HTML 5是最大威胁 比较Titanium和PhoneGap两大iOS ...

  10. mybatis if条件查询 及<号的问题

    摘录自:http://flt95.blog.163.com/blog/static/12736128920136185841551/ <if test="p=='1'"> ...