• bzoj 3620 似乎在梦中见过的样子


    3620: 似乎在梦中见过的样子

    Time Limit: 15 Sec  Memory Limit: 128 MB

    Description

    “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约.
    这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事.为了使这一次 Madoka 不再与 QB签订契约,Homura 决定在刚到学校的第一天就解决 QB.然而,QB 也是有许多替身的(但在第八话中的剧情显示它也有可能是无限重生的),不过,意志坚定的 Homura 是不会放弃的——她决定
    消灭所有可能是 QB 的东西.现在,她已感受到附近的状态,并且把它转化为一个长度为 n 的字符串交给了学 OI 的你.
    现在你从她的话中知道 , 所有形似于 A+B+A 的字串都是 QB 或它的替身 , 且len(A)>=k,len(B)>=1 (位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然后你必须尽快告诉 Homura 这个答案——QB 以及它的替身的数量.

    Input

    第一行一个字符串,第二行一个数 k

    Output

    仅一行一个数 ans,表示 QB 以及它的替身的数量

    Sample Input

    【样例输入 1】
    aaaaa
    1
    【样例输入 2】
    abcabcabc
    2

    Sample Output

    【样例输出 1】
    6

    【样例输出 2】
    8

    HINT

    对于 100%的数据:n<=15000 , k<=100,且字符集为所有小写字母

    Source

    2014湖北省队互测week2

    Tips:

      利用next的fail指针暴力就行了;

    Code:

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #define MAXN 15008
    using namespace std;
    
    int n,m,k,next[MAXN];
    char s[MAXN];
    long long ans;
    
    void kmp(int p){
        next[p]=p-1;
        for(int i=p+1;i<=n;i++){
            int j=next[i-1];
            while(j!=p-1&&s[j+1]!=s[i]) j=next[j];
            if(s[j+1]==s[i]) j++;
            next[i]=j;
        }
        int j=next[p];
        for(int i=p+1;i<=n;i++){
            while(j!=p-1&&s[j+1]!=s[i]) j=next[j];
            if(s[j+1]==s[i]) j++;
            while((j-p+1)*2>=(i-p+1)) j=next[j];
            if((j-p+1)>=k) ans++;
        }
    }
    
    int main(){
        scanf("%s",s);
        scanf("%d",&k);
        n=strlen(s);
        for(int i=n;i>0;i--)
            s[i]=s[i-1];
        for(int i=1;i<n;i++)
            kmp(i);
        printf("%lld",ans);
    }
  • 相关阅读:
    Sublime2 Text编辑器使用技巧
    PHP实现一个简单url路由功能
    jQuery extend函数详解
    Memcached常用命令及使用说明
    根据一张表去更新另一张表
    npm ERR! Error: socket hang up
    Oracle中group by 1,order by 1的理解
    Oracle中的next_day(date,char)函数的理解
    WebService入门
    OCupload、POI、PinYin4j的简单入门
  • 原文地址:https://www.cnblogs.com/WQHui/p/7575751.html
Copyright © 2020-2023  润新知