SGU 232 Infinite Fraction(字符串的最大表示)
2013-01-27 14:56
417 查看
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=232
题意:给出n,m,以及长度为n的原字符串S[0,n-1]。根据S构造出新的n个字符串A
,A[i][j]=S[(i+j*m)%n]。求A中最大的串。
思路:最大表示法。
题意:给出n,m,以及长度为n的原字符串S[0,n-1]。根据S构造出新的n个字符串A
,A[i][j]=S[(i+j*m)%n]。求A中最大的串。
思路:最大表示法。
const int N=150005; int n,m,visit ,cnt; string s,p; string ans; int minRepresention(string s) { int i=0,j=1,k=0,t,L=s.length(); while(i<L&&j<L&&k<L) { t=s[(i+k)%L]-s[(j+k)%L]; if(t==0) k++; else if(t<0) i+=k+1,k=0; else j+=k+1,k=0; if(i==j) j++; } return min(i,j); } int main() { RD(n,m); RD(s); ans=""; int L=s.length(),i,j,k; for(i=0;i<L;i++) if(!visit[i]) { p=""; cnt++; j=i; while(visit[j]!=cnt) { visit[j]=cnt; p+=s[j]; j=(j+m)%n; } int pos=minRepresention(p); int len=p.length(); p=p+p; string temp=p.substr(pos,len); if(ans==""||ans<temp) ans=temp; } while(ans.length()<n) { int det=n-ans.length(); det=min(det,ans.length()); ans=ans+ans.substr(0,det); } PR(ans); return 0; }
相关文章推荐
- sgu232:Infinite Fraction(最大表示法)
- SGU 232 Infinite Fraction Hash
- 字符串的最小/最大表示法
- 理解字符串循环同构的最小/最大表示法+模板
- ipv4ipv6 地址字符串表示最大长度
- 字符串同构最小最大表示法模板&&manacher模板
- 字符串的最大最小表示法 模板
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- 环形字符串最小最大表示法
- 字符串的最小表示法和最大表示法
- HDU 5442 Favorite Donut(字符串最大表示法)
- Problem F. Matrix Game XVII Open Cup named after E.V. Pankratiev||字符串最大表示法
- 字符串的最小最大表示法O(n)
- ACM最小表示法 最大表示法 模板 及其使用环境 判断字符串循环重构
- 最小最大表示法,求环形字符串的最小最大字典树(模板)
- 字符串的最大最小表示法
- 最大表示法--环形字符串最大字典序(HDU 5442)
- String Problem HDU - 3374(字符串的最大最小表示)
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)