您的位置:首页 > 其它

环状序列,ACM/ICPC,UVa1584

2015-03-17 00:49 323 查看

环状序列

长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到,在这些排列中字典顺序最小的称“最小表示”。

如CTCC的最小表示为CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。

提示:对于两个字符串,从第一的字符开始比较,当某一个位置的字符不同时,该位置字符较小的串,字典序小,如果一个字符串没有更多的字符,但是另一个字符串还没结束,则较短的字符串的字典序较小。

思路,其实就是定义两个int变量分别记录数组的下坐标,一个用于循环,一个用于记录当前开始最小的字符串的首下坐标,代码如下:

#include <iostream>
#include <cstring>
#define  maxn 105
using namespace std;

int less(char *s,int i,int ans);
int main()
{   int i,ans;
char s[maxn];
cin>>s;
int length=strlen(s);
ans=0;
for(i=1;i<length;i++)
if(less(s,i,ans))
ans=i;
for(i=0;i<length;i++)
cout<<s[(ans+i)%length];
return 0;
}
int less(char *s,int i,int ans)
{    int length=strlen(s);
int j;
for(j=0;j<length;j++)
if(s[(ans+j)%length]!=s[(i+j)%length])
return s[(ans+j)%length]>s[(i+j)%length];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: