[hdu4333]Revolving Digits
/*注意注意:本题非hdu4333原题,而是简化版,原版有多组数据。但此代码在修改输入后依旧可以通过多组数据*/
给出一个数字串,问有多少本质不同同构串比原串小,一样,大.
同构串是指,对于原串S[1-N]通过旋转变成同构串S[i-N]+S[0-i-1].
本质不同,指的是字符串不一样.
输入格式:
一行一个数字串
输出格式:
一行,输出本质不同的同构串比原串小,一样,大的三个数,用一个空格分隔开。
样例输入:
123123
样例输出:
0 1 2
数据范围:
数字串长度<=100000
#include<cstdio>
#include<cstring>
using namespace std;
char s1[],s2[];
int ex[],nxt[],nex[];
void get(char *s2){
int m=strlen(s2);
nex[]=nex[]=;int j=;
for(int i=;i<m;i++){
while(j>&&s2[i]!=s2[j])j=nex[j];
if(s2[i]==s2[j])j++;
nex[i+]=j;
}
}
void getex(char *s2){
int j=,n=strlen(s2);
while(j+<n&&s2[j+]==s2[j])j++;
nxt[]=n;nxt[]=j;int po=,p=nxt[]+;
for(int i=;i<n;i++){
int len=nxt[i-po];
if(len+i<p)nxt[i]=len;
else{
int j=p-i;
if(j<)j=;
while(i+j<n&&s2[j]==s2[j+i])j++;
nxt[i]=j;
po=i;
p=nxt[po]+po;
}
}
}
void exkmp(char *s1,char *s2){
int j=,n=strlen(s1),m=strlen(s2);
while(s1[j]==s2[j]&&j<n&&j<m)j++;
ex[]=j;int po=,p=ex[];
for(int i=;i<n;i++){
int len=nxt[i-po];
if(len+i<p)ex[i]=len;
else{
int j=p-i;
while(i+j<n&&j<m&&s1[j+i]==s2[j])j++;
ex[i]=j;
po=i;
p=ex[po]+po;
}
}
}
int main(){
scanf("%s",s2);int len=strlen(s2);
for(int i=;i<len;i++)
s1[i]=s2[i],s1[i+len]=s2[i];
getex(s2);
exkmp(s1,s2);
get(s2); int temp=len%(len-nex[len])==?len/(len-nex[len]):;
int a=,b=,c=;
for(int i=;i<len;i++){
if(ex[i]>=len)b++;
else if(s1[i+ex[i]]<s2[ex[i]])a++;
else c++;
}
printf("%d %d %d",a/temp,b/temp,c/temp);
}
[hdu4333]Revolving Digits的更多相关文章
- hdu4333 Revolving Digits(扩展kmp)
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 【HDU4333】Revolving Digits(扩展KMP+KMP)
Revolving Digits Description One day Silence is interested in revolving the digits of a positive i ...
- Revolving Digits(hdu4333)
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Revolving Digits[EXKMP]
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 字符串(扩展KMP):HDU 4333 Revolving Digits
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 4333 Revolving Digits 扩张KMP
标题来源:HDU 4333 Revolving Digits 意甲冠军:求一个数字环路移动少于不同数量 等同 于的数字 思路:扩展KMP求出S[i..j]等于S[0..j-i]的最长前缀 推断 nex ...
- 扩展KMP - HDU 4333 Revolving Digits
Revolving Digits Problem's Link Mean: 给你一个字符串,你可以将该字符串的任意长度后缀截取下来然后接到最前面,让你统计所有新串中有多少种字典序小于.等于.大于原串. ...
- HDU - 4333 :Revolving Digits (扩展KMP经典题,问旋转后有多少个不同的数字小于它本身,等于它本身,大于它本身。)
One day Silence is interested in revolving the digits of a positive integer. In the revolving operat ...
- Hdu 4333 Revolving Digits(Exkmp)
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- 设置本地wamp环境挂载多站点同时运行
之前写过一篇关于在Linux环境下配置虚拟主机的文章:现在又有一种场景:在本地同时写多个项目:可本地的wamp环境下默认只有一个www目录:这样经常修改目录很痛苦:那么幸福就这么猝不及防的来了:下面就 ...
- 搭建confluence参考文献
https://www.cnblogs.com/kevingrace/p/7607442.html https://yq.aliyun.com/articles/144747?t=t1 jira: h ...
- QT 事件处理 KeyPressEvent 和 定时器时间 Timer
1. 按键事件响应, 两种方法,一种直接处理Event,过滤出KeyPress,另一种直接处理KeyPressEvent. bool Dialog::event(QEvent *e) { if( e- ...
- 虚拟机CentOS6.5网络配置
不得不说 6.5比7.0麻烦了许多.. 编辑ifcfg配置文件 vi /etc/sysconfig/network-script/ifcfg-eth0 内容如下 DEVICE=eth0 HWADDR ...
- 微信小程序申请。很蛋疼的流程。
微信小程序申请. 营业执照,食品许可证,身份证正面,身份证反面. 1.先要申请服务号. 需要一个QQ邮箱,申请服务号. 填写各种信息,营业执照信息. 法人信息. 管理员用自己人的.方便开发操作. 申请 ...
- openstack havana块存储Cinder磁盘加密方法研究
http://blog.csdn.net/cloudresearch/article/details/19092219 在openstack havana的release note中有如下介绍“Att ...
- JDBC方式操作数据库
1.读取配置文件,我将配置信息写入配置文件(.properties)中,方便后期数据库变更后或者其他项目使用,扩展性好些,尽量避免硬编码. driver=oracle.jdbc.driver.Orac ...
- MRC与ARC混合编程的编译器标记
如果是MRC项目创建ARC源文件,给这个源文件加上 -fobjc-arc 的编译器标记, 如果是ARC项目创建MRC源文件,给这个源文件加上 -fno-objc-arc 的编译器标记. 步骤: 1. ...
- coco2d-js 节点的属性和动作
记录一些coco简单的属性和动作,位置,锚点,透明度,大小,移动等 /*属性*/ if(!true){ var sprite1 = new cc.Sprite(res.Sp1); var sprite ...
- ZeroClipboard 简单应用
ZeroClipboard.config({ swfPath: "/scripts/ZeroClipboard.swf" }); var client = new ZeroClip ...