POJ-1509 Glass Beads---最小表示法模板

题目链接:

https://vjudge.net/problem/POJ-1509

题目大意:

给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小。

解题思路:

最小表示法模板

注意模板返回的下标是从0开始,答案要求从1开始

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<string>
 6 #include<set>
 7 using namespace std;
 8 const int maxn = 100000 + 10;
 9 const int INF = 0x3f3f3f3f;
10 int change_min(char s[])
11 {
12     int n = strlen(s);
13     int i = 0, j = 1, k = 0;
14     while(i < n && j < n && k < n)
15     {
16         int t = s[(i + k) % n] - s[(j + k) % n];
17         if(!t)
18             k++;
19         else
20         {
21             if(t > 0)
22                 i += k + 1;
23             else
24                 j += k + 1;
25             if(i == j)j++;
26             k = 0;
27         }
28     }
29     return i < j ? i : j;
30 }
31 char s[maxn];
32 int main()
33 {
34     int T;
35     scanf("%d", &T);
36     while(T--)
37     {
38         cin >> s;
39         cout<<(change_min(s) + 1)<<endl;
40     }
41     return 0;
42 }

 

转载于:https://www.cnblogs.com/fzl194/p/8934070.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值