您的位置:首页 > 其它

1355: [Baltic2009]Radio Transmission|Kmp

2016-03-04 21:39 316 查看
首先我要吐槽一下HINT..smg 你以为这样说我们就看不出这题是kmp啦...

kmp求出pre数组答案就是n-pre


似乎很显然,可以令t=n−pre[n]t=n-pre


然后s[n]=s[n−t]=s[n−2∗t]=s[n−3∗t]....s
=s[n-t]=s[n-2*t]=s[n-3*t]....对于其他的下标也是如此

[code]#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define N 1000005
using namespace std;
char s
;
int pre
,n;
int main()
{
    scanf("%d\n",&n);gets(s+1);
    int now=0;
    pre[1]=0;
    for(int i=2;i<=n;i++)
    {
        while(now&&s[now+1]!=s[i]) now=pre[now];
        if(s[now+1]==s[i])now++;
        pre[i]=now;
    }
    cout<<n-pre
;
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: