QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#340897 | #21648. Runs | unputdownable# | 90 | 246ms | 36156kb | C++17 | 3.0kb | 2024-02-29 13:55:07 | 2024-02-29 13:55:07 |
Judging History
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