QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#379394#8571. Palworlducup-team266#RE 749ms54360kbC++142.6kb2024-04-06 17:24:442024-04-06 17:24:45

Judging History

你现在查看的是最新测评结果

  • [2024-04-06 17:24:45]
  • 评测
  • 测评结果:RE
  • 用时:749ms
  • 内存:54360kb
  • [2024-04-06 17:24:44]
  • 提交

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;
} 

Details

Tip: Click on the bar to expand more detailed information

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...

output:


result: