码迷,mamicode.com
首页 > 其他好文 > 详细

C3L-UVa1584-Circular Sequence

时间:2020-06-27 22:48:22      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:ble   line   tps   rcu   最小   cstring   str   strlen   int   

平台:

UVa Online Judge

題號:

1584 - Circular Sequence

題目連結:

https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=448&page=show_problem&problem=4459

題目說明:

长度为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 }

 

C3L-UVa1584-Circular Sequence

标签:ble   line   tps   rcu   最小   cstring   str   strlen   int   

原文地址:https://www.cnblogs.com/lemonforce/p/13200292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!