QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#379394 | #8571. Palworld | ucup-team266# | RE | 749ms | 54360kb | C++14 | 2.6kb | 2024-04-06 17:24:44 | 2024-04-06 17:24:45 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
char c[401000],c_[400100];
int p[401000],lg[401000];
namespace opj{
int rk[1001000],sa[1010000],m,t[1001000],tr[1001000],h[401000],st[20][401000];
void SA(int n){
m=128;
for(int i=1;i<=m;i++)t[i]=0;
for(int i=1;i<=n;i++)t[rk[i]=c[i]]++;
for(int i=1;i<=m;i++)t[i]+=t[i-1];
for(int i=n;i;i--)sa[t[rk[i]]--]=i;
for(int k=1;;k<<=1){
int p=0;
for(int i=n-k+1;i<=n;i++)tr[++p]=i;
for(int i=1;i<=n;i++)if(sa[i]>k)tr[++p]=sa[i]-k;
for(int i=1;i<=m;i++)t[i]=0;
for(int i=1;i<=n;i++)t[rk[i]]++;
for(int i=1;i<=m;i++)t[i]+=t[i-1];
for(int i=n;i;i--)sa[t[rk[tr[i]]]--]=tr[i];
for(int i=1;i<=n;i++)swap(tr[i],rk[i]);
rk[sa[1]]=p=1;
for(int i=2;i<=n;i++)rk[sa[i]]=(tr[sa[i-1]]==tr[sa[i]]&&tr[sa[i-1]+k]==tr[sa[i]+k])?p:++p;
if(n==p)break;m=p;
}
for(int i=1,k=0;i<=n;i++){
if(k)k--;int j=sa[rk[i]-1];
while(i+k<=n&&j+k<=n&&c[i+k]==c[j+k])k++;
st[0][rk[i]]=k;
}
for(int j=1;j<20;j++)for(int i=1;i+(1<<j)-1<=n;i++)
st[j][i]=min(st[j-1][i],st[j-1][i+(1<<(j-1))]);
}
inline int lcp(int x,int y){
x=rk[x],y=rk[y];if(x>y)swap(x,y);x++;
int k=lg[y-x+1];
return min(st[k][x],st[k][y-(1<<k)+1]);
}
}
int n,m;
int sol(){
for(int i=1;i<=n;i++)c[n*2+1-i]=c[i];
opj::SA(n*2);
c_[0]='?',c_[1]='#';
for(int i=1;i<=n;i++)c_[i*2]=c[i],c_[i*2+1]='#';
c_[n*2+2]='!';
for(int i=0;i<=n*2+2;i++)p[i]=0;
int ans=m+min(n,m);
for(int i=1,mx=0,id=0;i<=n*2+1;i++){
if(i<=mx)p[i]=min(mx-i+1,p[2*id-i]);
while(c_[i+p[i]]==c_[i-p[i]])p[i]++;
if(i+p[i]-1>mx)mx=i+p[i]-1,id=i;
ans=max(ans,p[i]-1);
if(!(i&1)){
int e=p[i]/2,L=i/2-e,R=i/2+e;
for(int j=1;j<=m&&R+j<=n+1;j++){
int lc=0;
if(L&&R+j<=n)lc=min(opj::lcp(R+j,n*2+1-L),n+1-(R+j));
ans=max(ans,p[i]-1+(lc+j)*2);
}
for(int j=1;j<=m&&j<=L;j++){
int lc=0;
if(j<L&&R<=n)lc=min(opj::lcp(R,n*2+1-(L-j)),n+1-R);
ans=max(ans,p[i]-1+(lc+j)*2);
}
}
else{
int e=p[i]/2,L=i/2-e,R=(i+1)/2+e;
for(int j=1;j<=m&&R+j<=n+1;j++){
int lc=0;
if(L&&R+j<=n)lc=min(opj::lcp(R+j,n*2+1-L),n+1-(R+j));
ans=max(ans,p[i]-1+(lc+j)*2);
}
for(int j=1;j<=m&&j<=L;j++){
int lc=0;
if(j<L&&R<=n)lc=min(opj::lcp(R,n*2+1-(L-j)),n+1-R);
ans=max(ans,p[i]-1+(lc+j)*2);
}
}
}
return ans;
}
void soll(){
scanf("%d%d%s",&n,&m,c+1);
int ans=sol();
for(int i=2;i<=n;i++)for(int j=i;j<n&&j-i+1<=m;j++)
ans=max(ans,min(opj::lcp(j+1,n*2+2-i),n-j)*2+j-i+1+m);
printf("%d\n",ans);
}
int main(){
lg[0]=-1;
for(int i=1;i<=400000;i++)lg[i]=lg[i>>1]+1;
int T;scanf("%d",&T);while(T--)soll();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 20276kb
input:
4 1 3 a 4 1 icpc 4 2 icpc 8 4 icecream
output:
4 5 5 11
result:
ok 4 number(s): "4 5 5 11"
Test #2:
score: 0
Accepted
time: 493ms
memory: 50236kb
input:
1 200000 66 jsmwjmibgkjvdscqllsxpaxiycmpauhnzschbivtqbjfrxrqvhvfbqecozjewqqpwdfbeqppjkgxhbnniopkptkygspcdswhwadfwhnzovvpshgcdukrupeztkpxwhmctaquqbxtidzbbxsyuaeikuldaoeudletrsmqptaejibkymsjhmwykqsjdvvdaqwelrcpxwrwhuvodipjniowfofbjktkdezwqqbvwsppsmpilntmdmlxgkaxymnugmmcsljkjzjuudnllydwdwwanadynsoiolso...
output:
141
result:
ok 1 number(s): "141"
Test #3:
score: 0
Accepted
time: 749ms
memory: 54360kb
input:
1 200000 100 qhiaajzxinenucrnfffumuhnovpuwcnojbhsktztapgyivmfqrlntwazwnfetwqieckxcnkskpidltiydfoveaucckximydxxfbiwbdufmbhywqkflyqxbijakadqkzftlciccbpnldsqhtjxuxnvkusvizavuyfhdroiuominebadhfqzrpjnzpgyvkejfwmueiltyeqpvwrkanqknyacqganbszktocfuvvsfrboaennwpaabfdnaurvvurysrijnfaonesihbhrrvbvyhpbremsuhhbc...
output:
209
result:
ok 1 number(s): "209"
Test #4:
score: 0
Accepted
time: 50ms
memory: 22244kb
input:
10000 21 7 fhcjhdjcfbfbdeeheibhg 18 8 hccgjfaadefhjhcijc 15 7 ahefiiheaigjiid 15 3 fgjjebidbfgbdij 15 5 jccebbgjbhifjhb 20 2 hcbddhibgfccjjcfebcc 19 1 ehbdgiicchijebidbcd 20 8 gbcfghefhbjggecdhcbj 17 2 jjaeaccjbcfiehfdd 23 4 iafjedfbebbhcfgfjbehdaf 22 1 jgiiiaacehcbaiehfggcfi 17 2 jefbbfigfhbhfcici ...
output:
17 21 17 11 13 9 6 18 9 11 6 9 22 8 21 23 5 23 7 16 9 23 25 11 17 12 9 5 20 5 23 12 7 13 16 17 21 21 21 12 16 21 21 8 9 11 21 15 5 24 13 7 21 13 11 8 7 19 25 7 8 12 13 22 15 14 7 15 7 20 15 13 11 15 5 11 23 17 17 19 15 7 19 17 25 13 23 10 17 21 9 21 7 23 21 13 16 7 14 10 13 10 9 11 7 21 15 19 11 23 ...
result:
ok 10000 numbers
Test #5:
score: 0
Accepted
time: 135ms
memory: 54332kb
input:
1 200000 100 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
200100
result:
ok 1 number(s): "200100"
Test #6:
score: 0
Accepted
time: 645ms
memory: 54252kb
input:
1 200000 73 jgqahsycxmrrwvszqigkxmxxckratkgiyyqbxgjzaqkufvkgmepixhjdugpsntlsgtiedueukiytrytrcvlkymwibsfdhytbffmtaytnfczbavrrbdnpegwxubyeoopzopqhrwukohojtaizsureefffglwjfawvpqqnjteveuscyelgjiukskvymqejzwlnrjgvnpwnttzahoupruedryqeyahxgltnibxhbpxmhxxnmrebsgbjwsfpipezkekaqptnwtuanbfyfwyotwkrvlamnuvhunty...
output:
175682
result:
ok 1 number(s): "175682"
Test #7:
score: -100
Runtime Error
input:
10000 12 1 jelwdrimpvtq 19 8 qcogumialfqhaahfhtb 11 12 tbnfsiqbibv 5 4 hdehb 4 1 ivxi 7 8 nonrwqa 14 16 obvpfqjekvmnyq 4 5 fzhi 18 17 gploorpjnrrhcrgxlp 2 3 pf 7 9 uiliuyr 1 3 v 3 3 bgj 9 4 tektrwtmk 10 4 vvkvbzpbye 20 5 jqzqpqiwkssksbilayvj 2 4 kl 5 2 vptsk 20 9 kuiwsxhfmirnrhzuysqd 8 8 aairrgjl 15...