hnuun 11544 小明的烦恼——找字符串(字符串)

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0

最小最大表示法:

求环形字符串的最小最大字典序:

参考:http://www.cnblogs.com/ziyi--caolu/p/3245132.html

最小表示法:

初始时,i=0,j=1,分别以i,j,为起始点顺着i,j,往下比较直到找的str[i+k]!=str[j+k],然后分两种情况考虑:

1、  str[i+k]>str[j+k],i变成i=i+k+1,j不变,然后继续往下比较。

2、  str[i+k]<str[j+k],j变成j=j+k+1,i不变,然后继续往下比较。

直到i或j大于串长,找较小者。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <vector>
 5 #include <cstring>
 6 #include <string>
 7 #include <algorithm>
 8 #include <string>
 9 #include <set>
10 #include <functional>
11 #include <numeric>
12 #include <sstream>
13 #include <stack>
14 #include <map>
15 #include <queue>
16 #pragma comment(linker, "/STACK:102400000,102400000")
17 #define CL(arr, val)    memset(arr, val, sizeof(arr))
18
19 #define ll long long
20 #define inf 0x7f7f7f7f
21 #define lc l,m,rt<<1
22 #define rc m + 1,r,rt<<1|1
23 #define pi acos(-1.0)
24
25 #define L(x)    (x) << 1
26 #define R(x)    (x) << 1 | 1
27 #define MID(l, r)   (l + r) >> 1
28 #define Min(x, y)   (x) < (y) ? (x) : (y)
29 #define Max(x, y)   (x) < (y) ? (y) : (x)
30 #define E(x)        (1 << (x))
31 #define iabs(x)     (x) < 0 ? -(x) : (x)
32 #define OUT(x)  printf("%I64d\n", x)
33 #define lowbit(x)   (x)&(-x)
34 #define Read()  freopen("a.txt", "r", stdin)
35 #define Write() freopen("b.txt", "w", stdout);
36 #define maxn 1010
37 #define maxv 1010
38 #define mod 1000000000
39 using namespace std;
40 char str[5000010];
41 int work(int m)
42 {
43     int i,j,l;
44     i=0; j=1;
45     while(i<m && j<m)
46     {
47         for(l=0;l<m;l++)
48             if(str[(i+l)%m]!=str[(j+l)%m]) break;
49         if(l>m) break;
50         if(str[(i+l)%m] > str[(j+l)%m])
51             i=i+l+1;
52         else
53             j=j+l+1;
54         if(i==j) j=i+1;
55     }
56     if(i<j) return i;
57     return j;
58 }
59
60 int main()
61 {
62     //freopen("a.txt","r",stdin);
63     int t;
64     scanf("%d",&t);
65     while(t--)
66     {
67         scanf("%s",str);
68        // printf("%s\n",str);
69         int l=strlen(str);
70         printf("%d\n",work(l));
71     }
72     return 0;
73 }

最大表示法:

 1 int work(int len,char pat[])  //最大表示法
 2 {
 3    //int len = strlen(pat);
 4    int i=0,j=1,k=0;
 5    while(i<len && j<len && k<len)
 6    {
 7        int t = pat[(i+k)%len] - pat[(j+k)%len];
 8        if(!t) k++;
 9        else
10        {
11            if(t>0) j = j+k+1;
12            else i = i+k+1;
13            if(i == j) j++;
14            k = 0 ;
15        }
16    }
17    return i<j?i:j;
18 }

时间: 2024-10-21 09:47:13

hnuun 11544 小明的烦恼——找字符串(字符串)的相关文章

hunnu 小明的烦恼——找字符串

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 小明的烦恼——找字符串 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB Total submit users: 108, Accepted users: 68 Problem 11544 : No special judgement Probl

hunnu 11545小明的烦恼——找路径 (最大流)

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 37 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

hunnu11544:小明的烦恼——找字符串

Problem description   小明是个很优秀的同学,他除了特别公正外,他也很细心,当然老师肯定也知道,这不,老师又有事情找他帮忙了,老师每周都会给他一个字符串A,然后问小明"A字符串的循环移位产生的所有字符串中,字典序最小的是哪个",于是小明屁颠屁颠的一个一个比对,但是长久下来,小明实在是受不了了,所以他想请你帮帮他.同样,你帮他解决,你就会多AC一个题目. Hint: 如果A字符串为bcda,那么其所有的循环移位的新字符串有cdab,dabc,abcd,和他自己bcda

hunnu - 11545 小明的烦恼——找路径 (最大流)

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11545 只是要求不经过相同的边,那么每次找出一条增广路T--,判断T<=0即可. 在加边的时候注意要c<=C的时候才需要加边. 邻接表: 1 # include <cstdio> 2 # include <cstring> 3 # include <algorithm> 4 # include <iostream&

hunnu--11545--小明的烦恼——找路径

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 36 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

擅长排列的小明 II(找规律)

擅长排列的小明 II 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1.第一个数必须是1 2.相邻两个数之差不大于2 你的任务是给出排列的种数. 输入 多组数据.每组数据中输入一个正整数n(n<=55). 输出 输出种数. 样例输入 4 样例输出 4 dp[i]=dp[i-1]+dp[i-3]+1; 题目大意:给出1-n

hunnu11543:小明的烦恼——分糖果

Problem description   小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非常特别的性格,就是他们仅仅喜欢偶数.对于糖果也一样,所以小明在分糖果时也必需要保证这一点,即使每一个同学分的糖果数量不一样.都是奇怪的是,小明有时候并不可以合格的分糖果,这让他大为苦恼.害怕别的同学会不再信任他(虽然其它同学不会这么想).所以他想请你帮帮他.在每次老师把糖果给他时,就帮他推断出糖果能

【贪心+堆】XMU 1584 小明的烦恼

题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能完成几个任务. 题目思路: [贪心+堆] 一开始想贪心但是没想到要加个堆,又跪了. 首先按照结束时间排序,结束时间早的肯定优先考虑. 如果当前的任务无法完成,就将当前任务和之前已经做了的任务中耗时最长的取消掉,改做当前任务 (如果当前任务就是耗时最长的则不用加当前任务,因为取消一个换另一个结果不会更差,只

小明系列问题――小明序列(LIS)

小明系列问题――小明序列 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4521 Description 大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了.可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来找去都是自己早已研究过的序列.小明想既然找不到,那就自己来发明一个新的序列问题吧!