首页 > 其他 > 详细

HDU 6740 MUV LUV EXTRA(kmp原理)

时间:2019-09-29 14:11:24      阅读:58      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=6740

从后往前维护fail数组,枚举已出现的循环节总长度更新答案即可。

 

 1 #define bug(x) cout<<#x<<" is "<<x<<endl
 2 #define IO std::ios::sync_with_stdio(0)
 3 #define ull unsigned long long
 4 #include <bits/stdc++.h>
 5 #define iter ::iterator
 6 #define pa pair<int,ll>
 7 #define pp pair<int,pa>
 8 using namespace  std;
 9 #define ll long long
10 #define mk make_pair
11 #define pb push_back
12 #define se second
13 #define fi first
14 #define ls o<<1
15 #define rs o<<1|1
16 const int N=1e7+5;
17 ll mod=998244353;
18 ll a,b;
19 char s[N],t[N];
20 int fail[N];
21 void kmp(){
22     int n=strlen(t);
23     fail[0]=-1;
24     fail[1]=0;
25     int i=1,j=0;
26     while(i<n&&j<n){
27         if(j==-1||t[i]==t[j])fail[++i]=++j;
28         else j=fail[j];
29     }
30 }
31 int main(){
32     while(~scanf("%lld%lld%s",&a,&b,s)){
33         int n=strlen(s);
34         int m=0;
35         for(int i=n-1;i>0;i--){
36             if(s[i]==.)break;
37             t[m++]=s[i];
38         }
39         kmp();
40         ll ans=a-b;
41         for(int i=2;i<=m;i++){
42             ans=max(ans,a*i-b*(i-fail[i]));
43         }
44         printf("%lld\n",ans);
45     }
46 }

 

HDU 6740 MUV LUV EXTRA(kmp原理)

原文:https://www.cnblogs.com/ccsu-kid/p/11607453.html

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