标签:int POI2006 板子 next 理解 Periods ans include P3435
我佛了,跪求老师下午对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 }
我说啥??是不是板子??要是考场上碰到这题理解不了那岂不亏死。。。
标签:int,POI2006,板子,next,理解,Periods,ans,include,P3435 来源: https://www.cnblogs.com/hahaha2124652975/p/11137553.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。