RE了一片
查看原帖
RE了一片
892625
WangYinxiAlex楼主2024/7/30 15:13
#include<iostream>
#include<string.h>
#include<algorithm>
#define ll long long
using namespace std;
const int N=11000002;
const int mod=19930726;
char a[N<<1],s[N<<1];
ll sl=0,ql=0,p[N<<1],q[N<<1];
void Change(){
	ll n=strlen(a);
	s[sl++]='$';
	for(ll i=0;i<n;i++)s[sl++]=a[i];
	s[sl++]='#';
}
void Change2(){
	for(ll i=0;i<sl;i++){
		p[i]=(p[i]<<1)-1;
		q[ql++]=p[i];
		while(p[i]>1){
			q[ql++]=p[i]-2;
			p[i]-=2;
		}
	}
}
void Manacher(){
	ll r=0,c;
	for(ll i=1;i<sl;i++){
		if(i<r)p[i]=min(p[(c<<1)-i],p[c]+c-i);
		else p[i]=1;
		while(s[i-p[i]]==s[i+p[i]])p[i]++;
		if(p[i]+i>r){
			r=p[i]+i;
			c=i;
		}
	}
}
bool cmp(ll x,ll y){
	return x>y;
}
int main(){
	ll n,k;
	scanf("%d%d",&n,&k);
	scanf("%s",a);
	Change();
	Manacher();
	Change2();
	if(ql<k){
		printf("-1\n");
		return 0;
	}
	sort(q,q+ql,cmp);
	ll u=1;
	for(ll i=0;i<k;i++){
		u=u*q[i];
		u%=mod;
	}
	printf("%ld\n",u);
	return 0;
}

2024/7/30 15:13
加载中...