tjut 4333
来源:互联网 发布:天刀捏脸数据 女 冰儿 编辑:程序博客网 时间:2024/06/05 07:30
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<iomanip>#define INF 999999999using namespace std;const int MAX=100000+10;char s[MAX*2];int nxt[MAX];void get_next(char *a,int len){ int i=-1,j=0; nxt[0]=-1; while(j<len){ if(i == -1 || a[i] == a[j])nxt[++j]=++i; else i=nxt[i]; }}void get_extend(char *a,int len){ int k=0,i=1; nxt[0]=len; while(k+1<len && a[k] == a[k+1])++k; nxt[1]=k; k=1; while(++i<len/2){//只需要求到原串的长度即可 int maxr=k+nxt[k]-1; nxt[i]=min(nxt[i-k],max(maxr-i+1,0)); while(i+nxt[i]<len && a[nxt[i]] == a[i+nxt[i]])++nxt[i]; if(i+nxt[i]>k+nxt[k])k=i; }}int main(){ int t,num=0; cin>>t; while(t--){ scanf("%s",s); int len=strlen(s); get_next(s,len); int temp=len%(len-nxt[len]) == 0?len/(len-nxt[len]):1;//求循环节循环了几次 for(int i=0;i<=len;++i)s[i+len]=s[i]; get_extend(s,len+len); int a=0,b=0,c=0; for(int i=0;i<len;++i){ if(nxt[i]>=len)++b;//表示等于原串的 else if(s[nxt[i]]<s[i+nxt[i]])++c;//表示大于原串的 else ++a;//表示小于原串的 } cout<<"Case "<<++num<<": "<<a/temp<<' '<<b/temp<<' '<<c/temp<<endl; } return 0;}
0 0
- tjut 4333
- tjut 5289
- tjut 5288
- tjut 5294
- tjut 2586
- tjut 5296
- tjut 5297
- tjut 5299
- tjut 5384
- tjut 5387
- tjut 5386
- tjut 5381
- tjut 5400
- tjut 5399
- tjut 5396
- tjut 5398
- tjut 5412
- tjut 5410
- [1st.Aug.16.] NOIP2011 选择客栈——最终其实没有做出来
- 心少朴
- 11-23 多媒体 MediaPlayer、Camera、MediaRecorder Vitamio 笔记
- 什么是OGNL表达式
- 关于MySql8小时空闲后连接超时问题(testOnBorrow,logAbandoned等)
- tjut 4333
- HDU 1325 Is It A Tree?(树的判断,经典题目)
- 每周学一点Egret(15) 桌面版龙骨预览工具
- 设计模式六大原则
- [php学习十七]JQuery练习2-动画
- java集合---hashcode和equals的重写
- 共同学习Java源代码--数据结构--ArrayList类(八)
- HDOJ-----2120并查集(水题)
- 广告页右上角的“跳过”按钮