标签:ble line tps rcu 最小 cstring str strlen int
UVa Online Judge
1584 - Circular Sequence
长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,下图的环状串有10种表示:
CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等。在这些表示法中,字典序最小的称为"最小表示"。
输入一个长度为n(n≤100)的环状DNA串(只包含A、C、G、T这4种字符)的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT,CGAGTCAGCT的最小表示为AGCTCGAGTC。
2
CGAGTCAGCT
CTCC
AGCTCGAGTC
CCCT
每个字符开始的串比较即可,记录最小的。用加长度取余形成循环。
1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 105; 5 6 //比较q是不是比p字典序更加小 7 bool is_small(const char *str,int len, int p, int q) { 8 for (int i = 0; i < len; i++) { 9 if (str[(p+i)%len] != str[(q + i)%len]) { 10 return str[(p + i) % len] > str[(q + i) % len]; 11 } 12 } 13 return false; 14 } 15 16 void strPrint(const char *str,int len, int p) { 17 for (int i = 0; i < len; i++) { 18 putchar(str[(p + i) % len]); 19 } 20 putchar(‘\n‘); 21 } 22 23 int main() { 24 int T = 0; 25 scanf("%d", &T); 26 while (T--) { 27 char str[MAXN] = ""; 28 scanf("%s", str); 29 int small = 0; 30 int len = strlen(str); 31 for (int i = 0; i < len; i++) { 32 if (is_small(str,len,small,i)) { 33 small = i; 34 } 35 } 36 strPrint(str, len, small); 37 } 38 return 0; 39 }
标签:ble line tps rcu 最小 cstring str strlen int
原文地址:https://www.cnblogs.com/lemonforce/p/13200292.html