QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#340897#21648. Runsunputdownable#90 246ms36156kbC++173.0kb2024-02-29 13:55:072024-02-29 13:55:07

Judging History

This is the latest submission verdict.

  • [2024-02-29 13:55:07]
  • Judged
  • Verdict: 90
  • Time: 246ms
  • Memory: 36156kb
  • [2024-02-29 13:55:07]
  • Submitted

answer

#include <bits/stdc++.h>
#define pii pair <int, int> 
#define tup pair <pii, int>
using namespace std;
void write(int x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
mt19937 rnd(time(0));
int n,q;
char s[1000006];
int nxt[1000006],stk[1000006],top;
const int base1=19491001,mod1=1019260817;
const int base2=131,mod2=1000000007;
int hsh1[1000006],pw1[1000006];
int hsh2[1000006],pw2[1000006];
inline void inithsh(void) {
    static int val[128]; pw1[0]=pw2[0]=1;
    for(int i=0; i<128; ++i) val[i]=i*i;
    for(int i=1; i<=n; ++i) hsh1[i]=(1ll*hsh1[i-1]*base1+val[s[i]])%mod1;
    for(int i=1; i<=n; ++i) pw1[i]=1ll*pw1[i-1]*base1%mod1;
    for(int i=1; i<=n; ++i) hsh2[i]=(1ll*hsh2[i-1]*base2+val[s[i]])%mod2;
    for(int i=1; i<=n; ++i) pw2[i]=1ll*pw2[i-1]*base2%mod2;
}
inline int gethsh1(int l,int k) { return (hsh1[l+k]-1ll*hsh1[l]*pw1[k])%mod1; }  // l'=l-1
inline int gethsh2(int l,int k) { return (hsh2[l+k]-1ll*hsh2[l]*pw2[k])%mod2; }  // l'=l-1
inline int getHSH1(int r,int k) { return (hsh1[r]-1ll*hsh1[r-k]*pw1[k])%mod1; }  // reversed 
inline int getHSH2(int r,int k) { return (hsh2[r]-1ll*hsh2[r-k]*pw2[k])%mod2; }  // reversed
inline bool checklcp(int x,int y,int lcp) { return (gethsh1(x,lcp)-gethsh1(y,lcp))%mod1==0&&(gethsh2(x,lcp)-gethsh2(y,lcp))%mod2==0; }
inline bool checklcs(int x,int y,int lcs) { return (getHSH1(x,lcs)-getHSH1(y,lcs))%mod1==0&&(getHSH2(x,lcs)-getHSH2(y,lcs))%mod2==0; }
inline int lcp(int x,int y) {  // return length 
    --x,--y;  // mark
    int res=0,d=1,lim=n-max(x,y);
    while(res+d<=lim&&checklcp(x,y,res+d)) res+=d,d<<=1;
    for(d>>=1; d; d>>=1) (res+d<=lim) && checklcp(x,y,res+d) && (res+=d);
    return res;
}
inline int lcs(int x,int y) {  // return length 
    int res=0,d=1,lim=min(x,y);
    while(res+d<=lim&&checklcs(x,y,res+d)) res+=d,d<<=1;
    for(d>>=1; d; d>>=1) (res+d<=lim) && checklcs(x,y,res+d) && (res+=d);
    return res;
}
inline bool cmp(int x,int y) { int l=lcp(x,y); return s[x+l]<s[y+l]; }  // compare suffix
inline void findnxt(int o) {
    for(int i=1; i<=n; ++i) {
        while(top && cmp(i,stk[top])==o) nxt[stk[top--]]=i;
        stk[++top]=i;
    }
    while(top) nxt[stk[top--]]=n+1;
}
vector <tup> run;
inline void check(int x,int y) {  // lyndon root
    int l=x-lcs(x,y)+1,r=y+lcp(x,y)-1;
	if(r-l+1<((y-x)<<1)) return ;
	run.push_back(make_pair(make_pair(l,r),y-x));
}
signed main() {
    // freopen("localinput","r",stdin);
    // freopen("localoutput","w",stdout);
    // scanf("%d%d%s",&n,&q,s+1); 
    scanf("%s",s+1); n=strlen(s+1); inithsh();
    findnxt(0); for(int i=1; i<=n; ++i) if(nxt[i]<=n) check(i,nxt[i]);
    findnxt(1); for(int i=1; i<=n; ++i) if(nxt[i]<=n) check(i,nxt[i]);
    sort(run.begin(),run.end());
	run.erase(unique(run.begin(),run.end()),run.end());
	write(run.size()); puts("");
	for(tup x : run) write(x.first.first),putchar(' '),write(x.first.second),putchar(' '),write(x.second),puts("");	
    // fprintf(stderr,"%.4lf\n",1.0*clock()/CLOCKS_PER_SEC);
    return 0;
}

详细

Test #1:

score: 10
Accepted
time: 23ms
memory: 8008kb

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: 209ms
memory: 11140kb

input:

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...

output:

1
1 200000 1

result:

ok 2 lines

Test #3:

score: 10
Accepted
time: 39ms
memory: 10476kb

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: 29ms
memory: 8976kb

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: 0ms
memory: 3832kb

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: 55ms
memory: 10524kb

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: 10
Accepted
time: 105ms
memory: 24648kb

input:

ghbaahxvveloseywqeuokpraqgyscdcimfioohjjnwyhdyftczjorapjhncjqetfjetxnfidbgkeesajrjxkkmutayescxxndtmryuubdgijyisstqefcayeycxccwpfpdypautdbbmblfvexakzakgzpfdrdtytyzkytfdwgqarxvyuvivysbzhgcakxbfwarwvxaufsuzprxjnhenbimlqoncmojkqbgoaiifaegpvdakmhxoplzfamkodtatwghwprerxkhtqhfcofqfqrnsgxgjsgcppmlgfrxdceyuo...

output:

38316
4 5 1
8 9 1
36 37 1
39 40 1
76 77 1
84 85 1
94 95 1
102 103 1
111 112 1
124 125 1
137 138 1
158 161 2
229 230 1
273 276 2
287 288 1
342 344 1
352 353 1
412 413 1
449 450 1
458 459 1
463 464 1
514 516 1
564 565 1
588 589 1
621 622 1
630 631 1
653 654 1
678 679 1
682 683 1
689 690 1
776 779 1
78...

result:

ok 38317 lines

Test #8:

score: 0
Time Limit Exceeded

input:

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp...

output:


result:


Test #9:

score: 10
Accepted
time: 204ms
memory: 36156kb

input:

aababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:

513547
1 2 1
1 43 16
1 113 43
1 296 113
1 775 296
1 2029 775
1 5312 2029
1 13907 5312
1 36409 13907
1 95320 36409
1 249551 95320
1 653333 249551
2 5 2
5 8 1
7 16 5
9 10 1
12 13 1
12 70 27
12 183 70
12 479 183
12 1254 479
12 3283 1254
12 8595 3283
12 22502 8595
12 58911 22502
12 154231 58911
12 40378...

result:

ok 513548 lines

Test #10:

score: 10
Accepted
time: 246ms
memory: 36068kb

input:

aababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:

700312
1 2 1
1 10 5
1 53 19
1 140 53
1 367 140
1 961 367
1 2516 961
1 6587 2516
1 17245 6587
1 45148 17245
1 118199 45148
1 309449 118199
1 810148 309449
2 6 2
4 9 3
6 7 1
7 10 2
8 17 5
10 13 1
11 19 4
15 17 1
15 87 34
15 227 87
15 594 227
15 1555 594
15 4071 1555
15 10658 4071
15 27903 10658
15 730...

result:

ok 700313 lines