QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#93098#21648. Runszsj6315#70 677ms248448kbC++142.0kb2023-03-31 10:53:422023-03-31 10:53:47

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-31 10:53:47]
  • 评测
  • 测评结果:70
  • 用时:677ms
  • 内存:248448kb
  • [2023-03-31 10:53:42]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define fr(i,a,b) for(int i=a;i<=b;i++)
#define ull unsigned long long
#define ll long long
#define mod 998244353
#define N 1000005
int n,cnt;
char s[N];
int x[N],y[N+N],c[N];
struct SA{
	int sa[N],rk[N],h[N];
	int st[20][N],lg[N];
	void getsa(int n,char* s){
		int m=128;
		fr(i,1,m)c[i]=0;
		fr(i,1,n)c[x[i]=s[i]]++;
		fr(i,1,m)c[i]+=c[i-1];
		for(int i=n;i;i--)sa[c[x[i]]--]=i;
		for(int k=1;k<=n;k<<=1){
			//deal y
			int num=0;
			fr(i,n-k+1,n)y[++num]=i;
			fr(i,1,n)if(sa[i]>k)y[++num]=sa[i]-k;
			//deal c
			fr(i,1,m)c[i]=0;
			fr(i,1,n)c[x[i]]++;
			fr(i,1,m)c[i]+=c[i-1];
			for(int i=n;i;i--)sa[c[x[y[i]]]--]=y[i],y[i]=x[i];//change y
			//deal x
			x[sa[1]]=1,num=1;
			fr(i,2,n)x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])?num:++num;
			if(num==n)break;
			else m=num;
		}
//		fr(i,1,n)printf("%d ",sa[i]);puts("");
	}
	void geth(){
		fr(i,1,n)rk[sa[i]]=i;
		int p=0;
		fr(i,1,n){
			if(p)p--;
			if(rk[i]==1)continue;
			while(i+p<=n&&sa[rk[i]-1]+p<=n&&s[i+p]==s[sa[rk[i]-1]+p])p++;
			h[rk[i]]=p;
		}
//		fr(i,2,n)printf("%d ",h[i]);puts("");
	}
	void initST(){
		fr(i,1,n)st[0][i]=h[i];
		lg[1]=0;fr(i,2,n)lg[i]=lg[i>>1]+1;
		fr(j,1,19)fr(i,1,n-(1<<j)+1)st[j][i]=min(st[j-1][i],st[j-1][i+(1<<(j-1))]);
	}
	int LCP(int u,int v){
		if(u==v)return n-u+1;
		int l=rk[u],r=rk[v];
		if(l>r)swap(l,r);
		l++;
		
		int k=lg[r-l+1];
		return min(st[k][l],st[k][r-(1<<k)+1]);
		
	}
	void init(int n,char* s){
		getsa(n,s);
		geth();
		initST();
	}
}A,B;
map<int,int> mp[N];
void chck(int l,int r,int p){
	if(mp[l].count(r)==0)mp[l][r]=p,cnt++;
}
int main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	A.init(n,s);
	reverse(s+1,s+n+1);
	B.init(n,s);
	reverse(s+1,s+n+1);
	fr(p,1,n){
		for(int i=p;i+p<=n;i+=p){
			int j=i+p;
			int l=B.LCP(n-i+1,n-j+1),r=A.LCP(i,j);
			if(l+r>p)chck(i-l+1,j+r-1,p);
		}
	}
	printf("%d\n",cnt);
	fr(l,1,n)for(auto p:mp[l])printf("%d %d %d\n",l,p.first,p.second);
	return 0;
}

詳細信息

Test #1:

score: 10
Accepted
time: 112ms
memory: 174596kb

input:

luynenolgrtkiqkdbpcoqsjyisilepmrkleqytdfmxrupcartchjwqhekspohcftpmkpfnwtmoqesqxluevqwewgylwgpdbgplwwbsqpigtayqmswjksngymtwulavrpjpomiedsmxtmpheoqogfwhtpdnaflsxwhlkrrnkfmfrcmvqelyjhfdylszqftndcynurbgwnnnrbkjfxioeptfaoervxgzzhovypdvfsiytviysqpzhkeiyibwhjviqjgpblmieugxroykgnloxpyyzzugirqbcwqdicloyulqij...

output:

7394
99 100 1
164 165 1
200 202 1
222 223 1
277 278 1
279 280 1
334 335 1
406 407 1
410 411 1
412 413 1
421 422 1
434 435 1
458 459 1
494 495 1
559 560 1
564 565 1
566 567 1
577 578 1
624 625 1
633 634 1
704 705 1
706 707 1
710 711 1
749 750 1
769 770 1
797 798 1
800 801 1
858 859 1
866 867 1
868 86...

result:

ok 7395 lines

Test #2:

score: 10
Accepted
time: 105ms
memory: 177716kb

input:

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...

output:

1
1 200000 1

result:

ok 2 lines

Test #3:

score: 10
Accepted
time: 189ms
memory: 180932kb

input:

bbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:

102706
1 2 1
1 27 11
1 70 27
1 183 70
1 479 183
1 1254 479
1 3283 1254
1 8595 3283
1 22502 8595
1 58911 22502
1 154231 58911
3 4 1
5 7 1
7 10 2
10 13 1
12 43 16
12 113 43
12 296 113
12 775 296
12 2029 775
12 5312 2029
12 13907 5312
12 36409 13907
12 95320 36409
12 200000 95320
14 15 1
16 18 1
18 21 ...

result:

ok 102707 lines

Test #4:

score: 10
Accepted
time: 139ms
memory: 177972kb

input:

dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcd...

output:

69092
1 28 12
1 72 28
1 188 72
1 492 188
1 1288 492
1 3372 1288
1 8828 3372
1 23112 8828
1 60508 23112
1 158412 60508
4 5 1
5 12 4
12 13 1
13 44 16
13 116 44
13 304 116
13 796 304
13 2084 796
13 5456 2084
13 14284 5456
13 37396 14284
13 97904 37396
13 200000 97904
16 17 1
17 24 4
24 25 1
25 32 4
29 ...

result:

ok 69093 lines

Test #5:

score: 10
Accepted
time: 8ms
memory: 102364kb

input:

dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcba

output:

31
1 28 12
1 72 28
4 5 1
5 12 4
12 13 1
13 44 16
13 100 44
16 17 1
17 24 4
24 25 1
25 32 4
29 56 12
32 33 1
33 40 4
40 41 1
41 88 16
44 45 1
45 52 4
52 53 1
53 60 4
60 61 1
61 68 4
68 69 1
69 76 4
73 100 12
76 77 1
77 84 4
84 85 1
88 89 1
89 96 4
96 97 1

result:

ok 32 lines

Test #6:

score: 10
Accepted
time: 184ms
memory: 182420kb

input:

bbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:

140058
1 2 1
1 34 15
1 87 34
1 227 87
1 594 227
1 1555 594
1 4071 1555
1 10658 4071
1 27903 10658
1 73051 27903
1 191250 73051
2 5 2
2 14 5
3 8 3
5 6 1
6 10 2
8 13 3
10 11 1
11 14 2
14 17 1
15 53 19
15 140 53
15 367 140
15 961 367
15 2516 961
15 6587 2516
15 17245 6587
15 45148 17245
15 118199 45148...

result:

ok 140059 lines

Test #7:

score: 0
Time Limit Exceeded

input:

ghbaahxvveloseywqeuokpraqgyscdcimfioohjjnwyhdyftczjorapjhncjqetfjetxnfidbgkeesajrjxkkmutayescxxndtmryuubdgijyisstqefcayeycxccwpfpdypautdbbmblfvexakzakgzpfdrdtytyzkytfdwgqarxvyuvivysbzhgcakxbfwarwvxaufsuzprxjnhenbimlqoncmojkqbgoaiifaegpvdakmhxoplzfamkodtatwghwprerxkhtqhfcofqfqrnsgxgjsgcppmlgfrxdceyuo...

output:


result:


Test #8:

score: 10
Accepted
time: 677ms
memory: 248448kb

input:

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp...

output:

1
1 999998 1

result:

ok 2 lines

Test #9:

score: 0
Time Limit Exceeded

input:

aababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

aababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:


result: