rt,最后一个点输出-1,我本地跑也是-1,但是交上去就错了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=19930726;
ll p[1000005]={0};
ll num[10000005]={0};
ll qpow(ll a,ll n)
{
ll res=1;
while(n)
{
if(n&1) res=res*a%mod;
a=a*a%mod;
n>>=1LL;
}
return res;
}
void solve()
{
ll n,k;
cin>>n>>k;
string s;
cin>>s;
ll center=0;
ll rmax=1;
for(ll i=1;s[i];i++)
{
if(i<rmax) p[i]=min(rmax-i,p[2*center-i]);
while(i-p[i]>=0 && s[i+p[i]]==s[i-p[i]]) p[i]++;
if(p[i]+i>rmax)
{
center=i;
rmax=p[i]+i;
}
num[2*p[i]-1]++;
num[2*p[i]-1]%=mod;
}
ll tem=0;
ll ans=1;
for(ll i=1000000;i>=1;i--)
{
if(tem+num[i]<=k)
{
ans=ans*qpow(i,num[i])%mod;
tem+=num[i];
if(tem==k) break;
}
else
{
ans=ans*qpow(i,k-tem)%mod;
tem=k;
break;
}
num[i-2]+=num[i];
num[i-2]%=mod;
}
if(tem<k) cout<<-1;
else cout<<ans;
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
//cin>>t;
while(t--) solve();
return 0;
}