12
26
2015
0

2176: Strange string

2176: Strange string

 

Description

给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的任务就是找出这个字符串.

Input

读入两行, 第一行为n, 第二行为字符串S.

Output

将”奇怪的字串” T输出输入样例

Sample Input

10
asdfasdfas

Sample Output

asasdfasdf

HINT

 

数据范围

对于100%的数据, 保证n≤10000000;

给定的字符串中的字符保证在#33 ~ #254之间.

 
 

 

最小表示法

#include <cstdio>
#include <iostream>
using namespace std;
const int MaxN = 10000010;
int N;
unsigned char s[MaxN];
int MR() {
    int i = 0, j = 1, k = 0;
    while (i < N && j < N && k < N) {
        int t = s[(i + k) % N] - s[(j + k) % N];
        if (!t) ++k;
        else {
            if (t > 0) i += k + 1;
            else j += k + 1;
            if (i == j) ++j;
            k = 0;
        }
    }
    return min(i, j);
}
int main() 
{
    scanf("%d", &N);
    scanf("%s", s);
    int k = MR();
    for (int i = 0; i < N; ++i)
        printf("%c", s[(i + k) % N]);
} 
Category: BZOJ | Tags: BZOJ 字符串 | Read Count: 450

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com