HDU 6740 MUV LUV EXTRA(kmp原理)

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了HDU 6740 MUV LUV EXTRA(kmp原理)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

 

 1 @H_512_14@#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",&amp;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原理)全部内容,希望文章能够帮你解决HDU 6740 MUV LUV EXTRA(kmp原理)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。