• P3435 [POI2006]OKR-Periods of Words


    我佛了,跪求老师下午对KMP的一些具体题目进行分析,我仍记得我昨天晚上两道kmp阅读理解给我带来的恐惧(当然也有可能是我太弱了。。)

    阅读理解1.。

    我说真的,这题就tm是语文题,理科生做个p,在tj的帮助下花了45+分钟理解题意,然后15分钟敲个板子,并加入一个ans变量统计总数,就过了??

    所以说老贾还是有必要花一堂课时间带我们看各类莫名的题面,给我们理解一下,顺便,教个语文。。

     1 #include<set>
     2 #include<map>
     3 #include<list>
     4 #include<queue>
     5 #include<stack>
     6 #include<string>
     7 #include<cmath>
     8 #include<ctime>
     9 #include<vector>
    10 #include<bitset>
    11 #include<memory>
    12 #include<utility>
    13 #include<cstdio>
    14 #include<sstream>
    15 #include<iostream>
    16 #include<cstdlib>
    17 #include<cstring>
    18 #include<algorithm>
    19 using namespace std;
    20 
    21 int n;
    22 long long ans;
    23 int next[1000010];
    24 char y[1000010];
    25 
    26 void zy(){//预处理next数组
    27     for(int i=1,j=0;i<n;i++){
    28         while(j>0&&y[i]!=y[j]){
    29             j=next[j];
    30         }
    31         if(y[i]==y[j]){
    32             j++;
    33         }
    34         next[i+1]=j;
    35     }
    36 }
    37 
    38 void KMPMatch(){//kmp板子,加个ans作为输出答案
    39     for(int i=1,j;i<=n;i++){
    40         j=i;
    41         while(next[j]!=0){
    42             j=next[j];
    43         }
    44         if(next[i]){
    45             next[i]=j;
    46         }
    47         ans+=i-j;
    48     }
    49 }
    50 
    51 int main(){
    52     scanf("%d",&n);
    53     cin>>y;//读入
    54     zy();
    55     KMPMatch();
    56     printf("%lld",ans);//输出,记得要用longlong
    57 }

    我说啥??是不是板子??要是考场上碰到这题理解不了那岂不亏死。。。

  • 相关阅读:
    计算机概念-shell
    数组去重复的三种方法
    CSS 自定义字体
    解决 IE 6/7 中console对象兼容性问题
    Sublime Text 3 Install Markdown Preview Plugins
    对象数组排序函数
    Ubuntu 16.04 下使用Xampp
    JavaScript 中 申明变量的方式--let 语句
    bootstrap框架 导航条组件使用
    phpstorm version 2016.2 License Server激活
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11137553.html
Copyright © 2020-2023  润新知