环状序列(UVa1584)

题目:长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。在这些序列中,字典序最小的称为“最小表示法”。
要求:输入一个长度为n的环状DNA串的一种表示法,你的任务是输出最小表示法。
思路:就像求n个元素中的最小值一样,用变量ans来表示目前为止,字典序最小串在输入串中的起始位置,然后不断更新ans。

#include<stdio.h>
#include<string.h>
#defien maxn 105

//环状串s的表示法p是否比表示法q的字典序小
int less(const char* s,int p,int q){
	int n= strlen(s);
	for(int i=0;i<n;i++)
	  if(s[(p+i)%n] != s[(q+i)%n])
	    return s[(p+i)%n] < s[(q+i)%n];
	return 0;//想等 
}

int main(){
	int T;
	char s[maxn];
	scanf("%s",&T);
	while(T--){
		scanf("%s",s);
		int ans = 0;
		int n = strlen(s);
		for(int i=1;i<n;i++)
		  if(less(s,i,ans))  ans = i;
		for(int i=0;i<n;i++)
		  putchar(s[(i+ans)%n]);
		putchar('\n');
	}
	return 0;
} 
全部评论

相关推荐

02-22 20:28
重庆大学 Java
程序员牛肉:首先不要焦虑,你肯定是有希望的。 首先我觉得你得好好想一想自己想要什么。找不到开发岗就一定是失败的吗?那开发岗的35岁危机怎么说?因此无论是找工作还是考公我觉得你都需要慎重的想一想。但你一定要避开这样一个误区:“我是因为找不到工作所以不得不选择考公”。 千万不要这么想。你这个学历挺好的了,因此你投后端岗肯定是有面试机会的。有多少人简历写的再牛逼,直接连机筛简历都过不去有啥用?因此你先保持自信一点。 以你现在的水平的话,其实如果想要找到暑期实习就两个月:一个月做项目+深挖,并且不断的背八股。只要自己辛苦一点,五月份之前肯定是可以找到暑期实习的,你有点太过于高看大家之间的技术差距了。不要焦虑不要焦虑。 除此之外说回你这个简历内容的话,基本可以全丢了。如果想做后端,先踏踏实实做两个项目再说+背八股再说。如果想考公,那就直接备战考公。 但是但是就像我前面说的:你考公的理由可以是因为想追求稳定,想追求轻松。但唯独不能是因为觉得自己找不到工作。不能这么小瞧自己和自己的学历。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务