首页 > 其他 > 详细

bzoj 1355: [Baltic2009]Radio Transmission

时间:2017-02-24 21:09:38      阅读:154      评论:0      收藏:0      [点我收藏+]

答案就是n-fail[n](n-next[n]),至于为什么,自己画个图看看就好了。

 1 #include<bits/stdc++.h>
 2 #define N 1000005
 3 #define LL long long
 4 #define inf 0x3f3f3f3f
 5 using namespace std;
 6 inline int ra()
 7 {
 8     int x=0,f=1; char ch=getchar();
 9     while (ch<0 || ch>9) {if (ch==-) f=-1; ch=getchar();}
10     while (ch>=0 && ch<=9) {x=x*10+ch-0; ch=getchar();}
11     return x*f;
12 }
13 char ch[N];
14 int fail[N];
15 int main()
16 {
17     int L=ra(); scanf("%s",ch+1);
18     int fix=0;
19     for (int i=2; i<=L; i++)
20     {
21         while (ch[fix+1]!=ch[i] && fix) fix=fail[fix];
22         if (ch[fix+1]==ch[i]) fix++;
23         fail[i]=fix;
24     }
25     printf("%d",L-fail[L]);
26     return 0;
27 }

 

bzoj 1355: [Baltic2009]Radio Transmission

原文:http://www.cnblogs.com/ccd2333/p/6440186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!