UVa 1584 Circular Sequence(环状序列)

来源:互联网 发布:淘宝网陶瓷杯 编辑:程序博客网 时间:2024/03/29 07:50
//长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到的。//字典序最小的称为最小表示//输入一个长度为n的环状DNA串(只含A,C,G,T)这四种字符//输出该串的最小表示#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN  105int main(){    int n;    int length;    char string[MAXN];    char min[MAXN];    char trans[MAXN*2];    scanf("%d",&n);    while(n--){      scanf("%s",string);      strcpy(min,string);      length=strlen(string);      for(int i=1;i<=length-1;i++){        strcpy(trans,string+i);        strcpy(trans+length-i,string);        trans[length]='\0';        if(strcmp(trans,min)<0)            strcpy(min,trans);      }       puts(min);    }    return 0;}/*// UVa1584(LA3225) Circular Sequence// Rujia Liu#include<stdio.h>#include<string.h>#define 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("%d", &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]);//用的好,大致思路可以相当于以前题目location=(location+1)%n;    putchar('\n');  }  return 0;}*/

1 0
原创粉丝点击