杂项(最小表示法):HZOI 2015 Glass Beads
2016-08-24 08:24
211 查看
【题目描述】
给定长度为n(n<=300000)的循环同构的字符串,定义最小表示为该字符串的字典序最小的同构表示,请输出这个表示。【输入格式】
第一行是串的长度,第二行是字符串。【输出格式】
串的最小表示。【样例输入】
10helloworld
【样例输出】
dhelloworl
【题目来源】
HZOI2015 改编自poj1509算法很显然,需要注意的是:s[len+1]要赋值成一个较大值。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn=300010; char s[maxn];int len; int main(){ freopen("MinRepresentations.in","r",stdin); freopen("MinRepresentations.out","w",stdout); scanf("%d%s",&len,s+1); int p1=1,p2=2,k;s[len+1]='z'+1; while(p1<=len&&p2<=len){k=0; while(s[p1+k]==s[p2+k])++k; if(s[p1+k]<s[p2+k]){ p2=p2+k+1; p2+=p1==p2; } else{ p1=p1+k+1; p1+=p1==p2; } } p1=p1<=len?p1:p2; for(int i=p1;i<=len;i++) putchar(s[i]); for(int i=1;i<p1;i++) putchar(s[i]); printf("\n"); return 0; }
相关文章推荐
- POJ 1509 Glass Beads(SAM 求最小表示法)
- [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
- Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)
- 【字符串最小表示法】 POJ 1509 Glass Beads
- bzoj 4484 [Jsoi2015] 最小表示 solution
- 无根树的同构:Hash最小表示法(bzoj 4337: BJOI2015 树的同构)
- 【bzoj4484】【JSOI2015】【最小表示】【拓扑排序+bitset】
- poj 1509 Glass Beads【最小表示法】
- BZOJ 4484 [Jsoi2015] 最小表示
- Glass Beads-最小表示法
- bzoj 4484: [Jsoi2015]最小表示
- UVA-719 Glass Beads(最小表示法)
- 【ZOJ-2006】Glass Beads【最小表示法】
- COGS 2123. [HZOI 2015] Glass Beads
- hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?
- poj - 1509 - Glass Beads(最小表示法)
- bzoj 4484: [Jsoi2015]最小表示 拓扑排序+bitset
- 【HDU5442 2015长春网络赛F】字符串最小表示法+函数逆用循环节法+翻转串字符串哈希法
- PKU 1509 Glass Beads (最小表示法)
- POJ 1509 Glass Beads(字符串的最小表示法)