QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#481116#21648. RunsAFewSuns#10 671ms42260kbC++143.1kb2024-07-16 20:31:182024-07-16 20:31:20

Judging History

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

  • [2024-07-16 20:31:20]
  • 评测
  • 测评结果:10
  • 用时:671ms
  • 内存:42260kb
  • [2024-07-16 20:31:18]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
namespace my_std{
	#define ll long long
	#define bl bool
	ll my_pow(ll a,ll b,ll mod){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res=(res*a)%mod;
			a=(a*a)%mod;
			b>>=1;
		}
		return res;
	}
	ll qpow(ll a,ll b){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res*=a;
			a*=a;
			b>>=1;
		}
		return res;
	}
	#define db double
	#define pf printf
	#define pc putchar
	#define fr(i,x,y) for(register ll i=(x);i<=(y);i++)
	#define pfr(i,x,y) for(register ll i=(x);i>=(y);i--)
	#define go(u) for(ll i=head[u];i;i=e[i].nxt)
	#define enter pc('\n')
	#define space pc(' ')
	#define fir first
	#define sec second
	#define MP make_pair
	#define il inline
	#define inf 1e18
	#define random(x) rand()*rand()%(x)
	#define inv(a,mod) my_pow((a),(mod-2),(mod))
	il ll read(){
		ll sum=0,f=1;
		char ch=0;
		while(!isdigit(ch)){
			if(ch=='-') f=-1;
			ch=getchar();
		}
		while(isdigit(ch)){
			sum=sum*10+(ch^48);
			ch=getchar();
		}
		return sum*f;
	}
	il void write(ll x){
		if(x<0){
			x=-x;
			pc('-');
		}
		if(x>9) write(x/10);
		pc(x%10+'0');
	}
	il void writeln(ll x){
		write(x);
		enter;
	}
	il void writesp(ll x){
		write(x);
		space;
	}
}
using namespace my_std;
#define mod 998244853
#define bs 29
ll n,hsh[1000010],pw[1000010],st[100010],top=0,f[100010],cnt=0;
char s[1000010];
struct node{
	ll l,r,p;
}a[2000020];
il bl operator<(const node &x,const node &y){
	if(x.l!=y.l) return x.l<y.l;
	return x.r<y.r;
}
il ll get_hash(ll l,ll r){
	return (hsh[r]-pw[r-l+1]*hsh[l-1]%mod+mod)%mod;
}
il ll get_lcp(ll x,ll y){
	ll l=1,r=min(n-x+1,n-y+1);
	while(l<r){
		ll mid=(l+r+1)>>1;
		if(get_hash(x,x+mid-1)==get_hash(y,y+mid-1)) l=mid;
		else r=mid-1;
	}
	if(get_hash(x,x+l-1)==get_hash(y,y+l-1)) return l;
	else return l-1;
}
il ll get_lcs(ll x,ll y){
	ll l=1,r=min(x,y);
	while(l<r){
		ll mid=(l+r+1)>>1;
		if(get_hash(x-mid+1,x)==get_hash(y-mid+1,y)) l=mid;
		else r=mid-1;
	}
	if(get_hash(x-l+1,x)==get_hash(y-l+1,y)) return l;
	else return l-1;
}
int main(){
	scanf("%s",s+1);
	n=strlen(s+1);
	fr(i,1,n) hsh[i]=(hsh[i-1]*bs+s[i]-'a'+1)%mod;
	pw[0]=1;
	fr(i,1,n) pw[i]=pw[i-1]*bs%mod;
	st[0]=n+1;
	pfr(i,n,1){
		while(top){
			ll tmp=get_lcp(i,st[top]);
			if(tmp<(n-st[top]+1)&&s[i+tmp]<s[st[top]+tmp]) top--;
			else break;
		}
		f[i]=st[top]-1;
		st[++top]=i;
	}
	fr(i,1,n){
		ll l=i,r=f[i];
		if(l>1) l-=get_lcs(i-1,f[i]);
		if(r<n) r+=get_lcp(i,f[i]+1);
		if((r-l+1)>=2*(f[i]-i+1)) a[++cnt]=(node){l,r,f[i]-i+1};
	}
	top=0;
	pfr(i,n,1){
		while(top){
			ll tmp=get_lcp(i,st[top]);
			if(tmp<(n-st[top]+1)&&s[i+tmp]>s[st[top]+tmp]) top--;
			else break;
		}
		f[i]=st[top]-1;
		st[++top]=i;
	}
	fr(i,1,n){
		ll l=i,r=f[i];
		if(l>1) l-=get_lcs(i-1,f[i]);
		if(r<n) r+=get_lcp(i,f[i]+1);
		if((r-l+1)>=2*(f[i]-i+1)) a[++cnt]=(node){l,r,f[i]-i+1};
	}
	sort(a+1,a+cnt+1);
	ll cntt=0;
	fr(i,1,cnt) if(!cntt||a[cntt]<a[i]) a[++cntt]=a[i];
	cnt=cntt;
	writeln(cnt);
	fr(i,1,cnt) pf("%lld %lld %lld\n",a[i].l,a[i].r,a[i].p); 
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 121ms
memory: 14832kb

input:

luynenolgrtkiqkdbpcoqsjyisilepmrkleqytdfmxrupcartchjwqhekspohcftpmkpfnwtmoqesqxluevqwewgylwgpdbgplwwbsqpigtayqmswjksngymtwulavrpjpomiedsmxtmpheoqogfwhtpdnaflsxwhlkrrnkfmfrcmvqelyjhfdylszqftndcynurbgwnnnrbkjfxioeptfaoervxgzzhovypdvfsiytviysqpzhkeiyibwhjviqjgpblmieugxroykgnloxpyyzzugirqbcwqdicloyulqij...

output:

7444
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:

wrong answer 1st lines differ - expected: '7394', found: '7444'

Test #2:

score: 0
Wrong Answer
time: 102ms
memory: 15488kb

input:

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...

output:

50017
1 200000 1
2 200000 1
3 200000 1
4 200000 1
5 200000 1
6 200000 1
7 200000 1
8 200000 1
9 200000 1
10 200000 1
11 200000 1
12 200000 1
13 200000 1
14 200000 1
15 200000 1
16 200000 1
17 200000 1
18 200000 1
19 200000 1
20 200000 1
21 200000 1
22 200000 1
23 200000 1
24 200000 1
150008 150005 -...

result:

wrong answer 1st lines differ - expected: '1', found: '50017'

Test #3:

score: 0
Wrong Answer
time: 139ms
memory: 19156kb

input:

bbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:

102736
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
14 15 1
16 18 1
18 21 2
21 24 1
23 32 ...

result:

wrong answer 1st lines differ - expected: '102706', found: '102736'

Test #4:

score: 0
Wrong Answer
time: 133ms
memory: 16368kb

input:

dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcd...

output:

69121
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
1 200000 0
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
16 17 1
17 24 4
24 25 1
25 32 4
29 56 12...

result:

wrong answer 1st lines differ - expected: '69092', found: '69121'

Test #5:

score: 10
Accepted
time: 1ms
memory: 8040kb

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: 0
Wrong Answer
time: 144ms
memory: 20164kb

input:

bbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:

140081
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 200000 0
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
17 ...

result:

wrong answer 1st lines differ - expected: '140058', found: '140081'

Test #7:

score: 0
Wrong Answer
time: 671ms
memory: 23136kb

input:

ghbaahxvveloseywqeuokpraqgyscdcimfioohjjnwyhdyftczjorapjhncjqetfjetxnfidbgkeesajrjxkkmutayescxxndtmryuubdgijyisstqefcayeycxccwpfpdypautdbbmblfvexakzakgzpfdrdtytyzkytfdwgqarxvyuvivysbzhgcakxbfwarwvxaufsuzprxjnhenbimlqoncmojkqbgoaiifaegpvdakmhxoplzfamkodtatwghwprerxkhtqhfcofqfqrnsgxgjsgcppmlgfrxdceyuo...

output:

9154
1 1000000 0
100010 7701 -92308
100010 38453 -61556
103701 103665 -35
103702 103631 -70
103703 103588 -114
103704 103515 -188
103705 103446 -258
103706 103422 -283
103707 103412 -294
103708 103386 -321
103709 103351 -357
103710 103336 -373
103711 103313 -397
103712 103311 -400
103713 103288 -424...

result:

wrong answer 1st lines differ - expected: '38316', found: '9154'

Test #8:

score: 0
Wrong Answer
time: 614ms
memory: 42260kb

input:

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp...

output:

800005
350013 350011 -1
350014 350010 -3
350015 350009 -5
350016 350008 -7
350017 350007 -9
350018 350006 -11
350019 350005 -13
350020 350004 -15
350021 350003 -17
350022 350002 -19
350023 350001 -21
350024 350000 -23
350025 349999 -25
350026 349998 -27
350027 349997 -29
350028 349996 -31
350029 349...

result:

wrong answer 1st lines differ - expected: '1', found: '800005'

Test #9:

score: 0
Wrong Answer
time: 650ms
memory: 25956kb

input:

aababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:

102463
1 1000000 0
100010 65583 -34426
124720 124717 -2
124721 124716 -4
124722 124711 -10
124723 124704 -18
124724 124702 -21
124725 124701 -23
124726 124700 -25
124727 124695 -31
124728 124688 -39
124729 124686 -42
124730 124685 -44
124731 124684 -46
124732 124677 -54
124733 124675 -57
124734 1246...

result:

wrong answer 1st lines differ - expected: '513547', found: '102463'

Test #10:

score: 0
Wrong Answer
time: 649ms
memory: 30024kb

input:

aababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:

296303
1 1000000 0
100010 87238 -12771
130398 130392 -5
130399 130387 -11
130400 130385 -14
130401 130384 -16
130402 130382 -19
130403 130380 -22
130404 130379 -24
130405 130377 -27
130406 130372 -33
130407 130370 -36
130408 130369 -38
130409 130367 -41
130410 130365 -44
130411 130364 -46
130412 130...

result:

wrong answer 1st lines differ - expected: '700312', found: '296303'