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

POJ 1509 循环同构的最小表示法

时间:2015-06-11 14:17:52      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 题目大意:

给定一个字符串,可以把一段尾部接到头部,这样找到一个最小的字符串

 

方案一:

利用循环同构中找最小表示的方法来解决

论文参考http://wenku.baidu.com/view/438cad13a2161479171128b6.html

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 
 5 using namespace std;
 6 #define N 10005
 7 char s[N];
 8 
 9 inline int minpos(char *s)
10 {
11     int l = strlen(s);
12     int i=0 , j=1 , k=0;
13     while(i<l&&j<l&&k<l){ //这里k<l是防止出现所有数都一样导致无限循环
14         if(i == j) j++;
15         else if(s[(i+k)%l]>s[(j+k)%l]){
16             i = i+k+1;
17             k=0;
18         }
19         else if(s[(i+k)%l]<s[(j+k)%l]){
20             j = j+k+1;
21             k=0;
22         }
23         else k++;
24     }
25     return min(i , j)+1;
26 }
27 
28 int main()
29 {
30    // freopen("a.in" , "r" , stdin);
31     int T;
32     scanf("%d" , &T);
33     while(T--)
34     {
35         scanf("%s" , s);
36         printf("%d\n" , minpos(s));
37     }
38     return 0;
39 }

 

POJ 1509 循环同构的最小表示法

标签:

原文地址:http://www.cnblogs.com/CSU3901130321/p/4568786.html

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