HDU 3374 String Problem
最大最小表示法与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的更多相关文章
- HDU 3374 String Problem (KMP+最大最小表示)
HDU 3374 String Problem (KMP+最大最小表示) String Problem Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HDU 3374 String Problem(KMP+最大/最小表示)
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU - 3374 String Problem (kmp求循环节+最大最小表示法)
做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...
- HDU 3374 String Problem (KMP+最小最大表示)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3374 [题目大意] 给出一个字符串,求出最小和最大表示是从哪一位开始的,并且输出数量. [题解] ...
- hdu 3374 String Problem(kmp+最小表示法)
Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...
- HDU 3374 String Problem(KMP+最大(最小)表示)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:给出一个字符串,依次左移一个单位形成一堆字符串,求其字典序最小和最大的字符串需要左移多 ...
- hdu 3374 String Problem (kmp+最大最小表示法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题目大意:输出最大和最小的是从哪一位开始的,同时输出最小循环节的个数. 这里简单介绍对字符串最小 ...
- hdu 3374 String Problem(最小表示法+最大表示法+kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给出一个字符串问这个字符串最小表示的最小位置在哪,还有有几个最小表示的串.最大表示的位置在 ...
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)
Problem - 3374 KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html 循环节推导的证明相当 ...
- HDU - 3374:String Problem (最小表示法模板题)
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
随机推荐
- hdu_1358Period(kmp找循环前缀)
题目在这儿 Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 在 .NET中,一种更方便操作配置项的方法
在应用程序的开发过程中,我们往往会为软件提供一些配置项,以允许软件根据配置项灵活来做事情,比如配置日志文件路径等,此外,我们还可以用配置项来为用户存储其偏好设置等. .NET 为我们默认提供了配置机制 ...
- JavaScript函数声明提升
首先,JavaScript中函数有两种创建方式,即函数声明.函数表达式两种. 1.函数声明. function boo(){ console.log(123); } boo() 2.函数表达式. va ...
- Oracle_view视图
Oracle_view视图 视图view --视图:view --查询班级信息并统计各班的人数 select * from stu; select * from clazz; select c ...
- ThinkPHP模板IF标签用法详解
投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-01 我要评论 这篇文章主要介绍了ThinkPHP模板IF标签用法,需要的朋友可以参考下 ThinkPHP的IF标 ...
- php switch case语句用法
- redis常见命令使用
这篇经验主要介绍了Redis常见用的一些操作命令.这篇例子是在windows上操作的.linux类似.写的一些基础,大神就别看了. 工具/原料 redis windows 方法/步骤 1 可以 ...
- 数据库复习总结(20)-存储过程以及.net调用存储过程
一.存储过程(注意区分将一段select语句进行封装叫做视图)(1)将一段t-sql脚本进行封装,以完成一个逻辑操作(2)创建存储过程: create proc 名称 ...
- Thrift之TProtocol系列TJSONProtocol解析
在了解JSON协议之前,朋友们可以先去了解一下JSON的基础知识,和ASCII基本分布,关于JSON一些常识请见这里; JSON (JavaScript Object Notation)是一种数据交换 ...
- Jquery实现两级联动
最后结果如下: 关键代码如下: <select name="customerCondition['credibilityBegin']" id="credibili ...