P3435 [POI2006]OKR-Periods of Words

Posted hahaha2124652975

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

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

以上是关于P3435 [POI2006]OKR-Periods of Words的主要内容,如果未能解决你的问题,请参考以下文章

P3435 [POI2006]OKR-Periods of Words

BZOJ 1520 POI2006 Szk-Schools

[POI2006]ORK-Ploughing

P3444 [POI2006]ORK-Ploughing

BZOJ1520[POI2006]Szk-Schools KM算法

bzoj 1513 [POI2006]Tet-Tetris 3D(二维线段树)