【KMP】 HDU 3374 String Problem 最小表示法
2015-07-08 14:20
357 查看
链接
求最小/大 字典序的串在的rank和出现次数
最小表示法:起始位置i,j 增加k的过程中比较大小
不相等时改变起始位置i/j=i/j+k+1,k=0 ;
意味着后缀都小于当前最小串
求最小/大 字典序的串在的rank和出现次数
最小表示法:起始位置i,j 增加k的过程中比较大小
不相等时改变起始位置i/j=i/j+k+1,k=0 ;
意味着后缀都小于当前最小串
//#include<bits/stdc++.h> //using namespace std; //const int eps=1e-8; //const int maxn=100022; //#define LL __int64 //int main() //{ // return 0; //} #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; #include <queue> #include <string> #include <cstring> #include <sstream> #include <map> #include <vector> #define LL long long const int maxn=2001000; int next1[maxn]; int get_next(char *s,int len) { int i=0,j=-1; next1[0]=j; while(i<len) { if(j==-1||s[i]==s[j]) i++,j++,next1[i]=j; else j=next1[j]; } } int KMP(char *a,int alen,char *b,int blen) { int i=0,j=0; int num=0; while(i<alen-1&&j<blen) { if(j==-1||a[i]==b[j]) i++,j++; else j=next1[j]; if(j==blen) { j=next1[j];num++; } } return num; } int get_mstring(char *s,int flag) { int len=strlen(s); int i=0,j=1,k=0; while(i<len&&j<len&&k<len) { int t=s[(i+k)%len]-s[(j+k)%len]; if(t==0) k++; else { if(flag) { if(t>0) j+=k+1; else i+=k+1; } else { if(t>0) i+=k+1; else j+=k+1; } if(i==j) j++; k=0; } } return min(i,j); } char s[1000002]; int main() { int n; while(scanf("%s",s)!=EOF) { int ln=get_mstring(s,0); int rn=get_mstring(s,1); int len=strlen(s); get_next(s,len); int x=(len-next1[len]); int ans=len%x?1:len/x; printf("%d %d %d %d\n",ln+1,ans,rn+1,ans); } return 0; }
相关文章推荐
- 写给将要实习的你-实习前你必须知道的几件事-SQL命令(二)
- Golang png Decode解析不了png图片
- 记录一个mysql按日期分组统计的查询
- 动态加载字符根据字符串的数量和长度动态加载
- Charles抓包
- winform中利用反射实现泛型数据访问对象基类(2)
- [LeetCode] Binary Search Tree Iterator
- SQLSTATE[HY000] [2002] No such file or directory
- 51nod 1400 序列分解(DFS + 剪枝)
- 如何在quartz的job中实现spring的依赖注入
- PopupWindow响应返回键的问题
- Spring bean数量统计
- Win10首个重大更新分支:Redstone版本10500曝光
- 《程序员面试宝典》 —— 多态的作用
- [转]统计代码行数的小技巧
- WCF - Self Hosting
- 装饰模式(Decorator)
- XAML中特殊字符
- TOJ 4110 A+B
- javascript基础八(知识点类闭包)