比赛 |
2024暑假C班集训7 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
游戏 |
最终得分 |
100 |
用户昵称 |
flyfree |
运行时间 |
0.666 s |
代码语言 |
C++ |
内存使用 |
8.19 MiB |
提交时间 |
2024-07-07 11:22:31 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 5000010
#define mod 19930726
char a[MAXN],b[MAXN];
ll d[MAXN],cnt[MAXN];
ll n,l,r,k,maxz,ans=1,num;
ll ksm(ll ds,ll zs){
ll ansz=1;
while(zs){
if(zs%2==1)ansz=(ansz*ds)%mod;
ds=(ds*ds)%mod;
zs/=2;
}
return ansz%mod;
}
int main(){
freopen("rehearse.in","r",stdin);
freopen("rehearse.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i*2]=a[i];
b[i*2-1]='#';
}
l=0,r=0;
a[0]='!';
for(int i=1;i<=n*2;i++){
if(i<=r){
int p=r-i+l;
if(d[p]<r-i+1)d[i]=d[p];
else{
d[i]=r-i+1;
while(b[i-d[i]]==b[i+d[i]])d[i]++;
}
}else{
while(b[i-d[i]]==b[i+d[i]])d[i]++;
}
if(r<i+d[i]-1){
r=i+d[i]-1;
l=i-d[i]+1;
}
if(b[i]!='#'){
ll p=((d[i]+1)/2)*2-1;
cnt[p]++;
maxz=max(maxz,p);
}
}
for(int i=maxz;i;i--){
cnt[i-2]+=cnt[i];
num=cnt[i];
// cout<<i<<" "<<num<<endl;
if(k>num){
ans=(ans*ksm(i,num))%mod;
k-=cnt[i];
}else{
ans=(ans*ksm(i,k))%mod;
k=0;
break;
}
}
if(k)cout<<"-1";
else cout<<ans%mod;
// for(int i=1;i<=2*n;i++)cout<<b[i]<<" ";
// cout<<endl;
// for(int i=1;i<=2*n;i++){
// cout<<d[i]<<" ";
// }
return 0;
}