最大最小表示法与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. maven(01)--安装及其介绍

    1:下载maven windows下载 2:将下载文件夹解压,然后放在一个安装目录(可任意选择),例如就放在D盘的根目录 然后在设置环境变量,新建一个环境变量,名称为M2_HOME,其设置值为mave ...

  2. Kubernetes volumes简介

    容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...

  3. [学习OpenCV攻略][011][显示图片]

    学习资料: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html   包含头文件 core.hpp:包含 ...

  4. docker运行dubbo-admin

    一:简介 dubbo-admin是dubbo框架的管理平台. 二: 创建继续镜像 Dockerfile FROM fangjipu/jdk8:8 RUN yum -y install epel-rel ...

  5. Version 1.7.0_80 of the JVM is not suitable for this product.Version: 1.8 or greater is required.

    Eclipse启动失败,设置eclipse启动jdk有2种方法 第一种: 直接安装eclipse对应的jdk版本,并设置环境变量 第二种: 修改eclipse配置文件eclipse.ini 在plug ...

  6. HTTP协议简介

    一.简介 HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议.消息模型:客户端发送请求消息,服务 ...

  7. Solr学习笔记2(V7.2)---导入自己的数据

    学而不思则罔,思而不学则殆,总是看文档不动手效果是不好的.没有实地的从自己的数据库获取数据测试一下始终是空,总结一下自己的操作步骤吧. 第一步准备配置文件 E:\Solr\server\solr\co ...

  8. ThinkPHP配置文件的加载

    分类: thinkphp(39) 版权声明:本文为博主原创文章,未经博主允许不得转载. 惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展 ...

  9. dede被注入后台提示用户名不存在解决方法

    如果已经发现/data,有很长一个txt记事本,说明已经被其他人SQL注入了,或是已经有人进行尝试SQL注入了了. 记事儿本如:75252sdaswfdfsfq538ef2ad3556_safe.tx ...

  10. linux常用命令(CentOS)

    1.目录切换命令 linux目录结构 ps:绿色标注为常用命令 cd xx 切换到该目录下的xx目录 cd ../ 切换到上一层目录 cd / 切换到系统根目录 cd ~ 切换到用户主目录 cd - ...