UVa 1584

背景:1Y

思路:类似于选择排序的思想,用一个ans来记录最小值,搜索所有可能值中的最小值。

学习:

1.strcmp(a,b)的返回值是a相对于b的字典序,大则返回1,小则返回-1,等则返回0.

2.一个线性的链要成环的话,就%n。

#include<stdio.h>
#include<string.h>

int main(void){
	  int t;
	  char DNA[105],ans[105];
		scanf("%d",&t);
		while(t--){
			scanf("%s",DNA);
			int length=strlen(DNA);
			memset(ans,'Z',sizeof(ans));
			for(int i=0;i<length;i++){
				for(int j=0,k=i,kk=i;j<length;j++,k=(++k)%length){
					if(DNA[k]<ans[j]){
						for(int l=kk,ll=0;ll<length;ll++,l=(++l)%length){
							ans[ll]=DNA[l];
						}
						break;
					}else if(DNA[k]>ans[j]) break;
				}
			}
			for(int i=0;i<length;i++){
				printf("%c",ans[i]);
			}
			printf("\n");
		}
		return 0;
}
时间: 2024-10-25 00:41:58

UVa 1584的相关文章

UVa 1584 Circular Sequence --- 水题

UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较二者字典序大小的函数, 然后再用一层循环,进行n次比较,保存最小的字典序的串的首字母位置,再利用模运算输出即可 /* UVa 1584 Circular Sequence --- 水题 */ #include <cstdio> #include <cstring> //字符串s为环状,

uva 1584 Circular Sequence (字符串处理)

C - Circular Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGTCAGCT", that is,

UVA 1584 - Circular Sequence(环状序列)(字典序)

1584 - Circular Sequence Time limit: 3.000 seconds Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGTCAGCT", that is, the last symbol ``T" in ``CGAGTCAGCT" is connected to the firs

UVa 1584 - Circular Sequence

哈哈哈哈,  又用Java强大的字符串API和集合类水过一道题,不服用C++来一遍看看比这个代码长多少(不考虑时间的情况下). import java.util.*; public class Main1584 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<String> arrlist = new ArrayList<String>(); St

UVA 1584 环状序列

题意: 给定一个环状字符串,输出字典序最小的线装字符串. 分析: 我一开始是将原字符串*2去模拟环,然后分别截取以字符串不同字母为首的子串,然后用sort去排序输出最小的串,复杂度为O(n^2 + nlogn)吧. 然后看了紫书的题解,用了一个函数去枚举比较每一个字母为开头的子串和预估答案的子串的字符串字典序大小,枚举串的某一个字母的使整个串字符串小于另一个串(他们长度都是一样的,只要其中一个小,那么整个就会小,因为字典序是取决前面的字母的)就立刻更新ans,然后他用的是下标mod长度,最坏复杂

uva 1586 分子量 uva 1584 字典序最小

1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<iostream> 5 #include<algorithm> 6 #include<map> 7 8 using namespace std; 9 10 int N; 11 12 map <char,double> ar; 13 14 int main(){ 15 ar['C'] =

UVa 1584 Circular Sequence(环形串最小字典序)

题意  给你一个环形串   输出它以某一位为起点顺时针得到串的最小字典序 直接模拟   每次后移一位比较字典序即可  注意不能用strcpy(s+1,s)这样后移  strcpy复制地址不能有重叠部分 #include<cstdio> #include<cstring> using namespace std; const int N = 150; char s[N], ans[N], c; int t, l; int main() { scanf ("%d",

UVa -1584 Circular Sequence 解题报告

1.题目大意 输入长度为n$(2\le n\le 100)$的环状DNA串,找出该DNA串字典序最小的最小表示. 2.思路 这题特别简单,一一对比不同位置开始的字符串的字典序,更新result. 3.代码 #include"stdio.h" #include"string.h" #define maxn 100 int judge(char* s,int p,int q) //比较p的字典序是否比q小 { int m=strlen(s); for(int i=0;

UVa1584

Circular Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 1584 uDebug Description Some DNA sequences exist in circular forms as in the following figure, which shows a circular sequence ``CGAGT