P9211 题解
honglan0301 · · 题解
题目分析
感觉没有很好的性质,但是观察
我们直接枚举
那么随
代码
/*
author: PEKKA_l
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <random>
using namespace std;
int l,n,m,lmx,cnt[35];
char s[300005],ans[300005];
mt19937 mt_rand(time(0));
int getrd(int l,int r) {return l+mt_rand()%(r-l+1);}
int check(int len)//随机
{
int cntt=0;
for(int i=1;i<=600;i++) {int wz=getrd(0,l-len-1); if(s[wz]==s[wz+len]) cntt++;}
return cntt;
}
signed main()
{
cin>>l>>lmx>>n>>m>>s;
int mxx=0,nmm;//枚举 l_0
for(int i=lmx;i>=1;i--) {int nans=check(i); if(nans>mxx) {mxx=nans; nmm=i;}}
for(int j=0;j<nmm;j++)
{
memset(cnt,0,sizeof(cnt)); int nnum=-1,nmax=0;
for(int k=j;k<l;k+=nmm)
{
cnt[s[k]-'a'+1]++; if(cnt[s[k]-'a'+1]>nmax) {nmax=cnt[s[k]-'a'+1]; nnum=s[k]-'a'+1;}
}
ans[j]=(char)(nnum+'a'-1);
}
cout<<nmm<<endl<<ans<<endl;
}