【 bzoj 1355 】 [Baltic2009]Radio Transmission - KMP

来源:互联网 发布:macbook安装破解软件 编辑:程序博客网 时间:2024/05/26 19:19

  考虑一个串重复出现多次并在最后超出这个字符串的话,肯定存在一个最长后缀等于最长前缀且后面剩下来的一截是那个重复串。
  KMP一下没了。

#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)inline int rd() {    char c = getchar();    while (!isdigit(c)) c = getchar() ; int x = c - '0';    while (isdigit(c = getchar())) x = x * 10 + c - '0';    return x;}const int maxn = 1000007;int n , nxt[maxn];char st[maxn];void input() {    n = rd();    scanf("%s" , st + 1);}void solve() {    int k = 0;    rep (i , 2 , n) {        while (k > 0 && st[k + 1] != st[i]) k = nxt[k];        if (st[k + 1] == st[i]) k = k + 1;        nxt[i] = k;    }    printf("%d\n" , n - nxt[n]);}int main() {    #ifndef ONLINE_JUDGE        freopen("data.txt" , "r" , stdin);    #endif    input();    solve();    return 0;}
0 0
原创粉丝点击