写了个暴力,想和 manacher 对拍,结果暴力挂了,求助 rt
#include<bits/stdc++.h>
#define Std_Maker lhm
#define ll long long
using namespace std;
const int N=1e6+1,mod=19930726;
ll l,k,maxn=-1,cnt,sum,num[N],ans=1;
string s;
string manacher(string s)
{
string ins;
ins+="#";
for(int i=0;i<s.length();i++)
{
if(i!=s.length()-1) ins+=s[i],ins+="$";
else ins+=s[i],ins+="@";
}
return ins;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>l>>k;
cin>>s;
s=manacher(s);
for(int i=1;i<=l*2;i++)
{
cnt=0;
if(s[i]=='@') break;
if(s[i]=='$')
{
for(int j=1;;j++)
{
if(i<j) break;
if(s[i-j]==s[i+j])
{
if(s[i-j]!='$')
{
cnt+=2;
sum++;
num[sum]=cnt;
//cout<<cnt<<endl;
}
}
else break;
}
}
else
{
cnt=1;
for(int j=1;;j++)
{
if(i<j) break;
if(s[i-j]==s[i+j])
{
if(s[i-j]!='$')
{
cnt+=2;
sum++;
num[sum]=cnt;
//cout<<cnt<<endl;
}
}
else break;
}
}
}
sort(num+1,num+sum+1);
if(sum<k) cout<<-1;
else
{
for(int i=sum;i>=sum-k+1;i--)
{
ans=(ans*num[i])%mod;
}
cout<<ans;
}
return 0;
}