P3435 [POI2006]OKR-Periods of Words
Posted hahaha2124652975
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3435 [POI2006]OKR-Periods of Words相关的知识,希望对你有一定的参考价值。
我佛了,跪求老师下午对KMP的一些具体题目进行分析,我仍记得我昨天晚上两道kmp阅读理解给我带来的恐惧(当然也有可能是我太弱了。。)
我说真的,这题就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