QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#479249 | #21648. Runs | juruoA# | 0 | 375ms | 56036kb | C++14 | 5.2kb | 2024-07-15 16:07:54 | 2024-07-15 16:07:56 |
Judging History
answer
#include <bits/stdc++.h>
using std::bitset;
using std::cout;
using std::deque;
using std::endl;
using std::greater;
using std::lower_bound;
using std::make_pair;
using std::map;
using std::max;
using std::min;
using std::multimap;
using std::multiset;
using std::nth_element;
using std::pair;
using std::priority_queue;
using std::queue;
using std::reverse;
using std::set;
using std::sort;
using std::sqrt;
using std::stable_sort;
using std::string;
using std::swap;
using std::unique;
using std::upper_bound;
using std::vector;
typedef long long li;
typedef long double lf;
inline li read(){
li ans = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
f = (ch == '-') ? -1 : 1;
ch = getchar();
}
while(ch <= '9' && ch >= '0'){
ans = ans * 10 + (ch ^ 48);
ch = getchar();
}
return ans * f;
}
struct SA{
li sa[1000010], rk[2000010], oldsa[1000010], oldrk[2000010], height[1000010], cnt[1000010];
void work(string s){
li n = s.length() - 1;
memset(rk, 0, sizeof rk), memset(oldrk, 0, sizeof oldrk), memset(cnt, 0, sizeof cnt);
li m = 1e6, lenp = 0;
for(li i = 1; i <= n; i++) cnt[rk[i] = s[i]]++;
for(li i = 1; i <= m; i++) cnt[i] += cnt[i - 1];
for(li i = n; i; i--) sa[cnt[rk[i]]--] = i;
memcpy(oldrk, rk, (n + 5) * sizeof(li));
for(li i = 1; i <= n; i++){
if(oldrk[sa[i]] == oldrk[sa[i - 1]]) rk[sa[i]] = lenp;
else rk[sa[i]] = ++lenp;
}
for(li w = 1; w <= n; w <<= 1, m = lenp){
memset(cnt, 0, (m + 5) * sizeof(li));
memcpy(oldsa, sa, (n + 5) * sizeof(li));
for(li i = 1; i <= n; i++) cnt[rk[oldsa[i] + w]]++;
for(li i = 1; i <= m; i++) cnt[i] += cnt[i - 1];
for(li i = n; i; i--) sa[cnt[rk[oldsa[i] + w]]--] = oldsa[i];
memset(cnt, 0, (m + 5) * sizeof(li));
memcpy(oldsa, sa, (n + 5) * sizeof(li));
for(li i = 1; i <= n; i++) cnt[rk[oldsa[i]]]++;
for(li i = 1; i <= m; i++) cnt[i] += cnt[i - 1];
for(li i = n; i; i--) sa[cnt[rk[oldsa[i]]]--] = oldsa[i];
memcpy(oldrk, rk, (n + 5) * sizeof(li));
lenp = 0;
for(li i = 1; i <= n; i++){
if(oldrk[sa[i]] == oldrk[sa[i - 1]] && oldrk[sa[i] + w] == oldrk[sa[i - 1] + w]) rk[sa[i]] = lenp;
else rk[sa[i]] = ++lenp;
}
if(n == lenp) break;
}
}
} sa;
struct node{
li l, r, p;
bool operator < (const node b) const{
return l == b.l ? r < b.r : l < b.l;
}
bool operator == (const node b) const{
return l == b.l && r == b.r;
}
};
li poww[1000010];
const li base = 251;
struct Hash{
string s;
li hash[1000010], n;
void work(string ss){
s = ss;
n = s.length() - 1;
for(li i = 1; i < s.length(); i++) hash[i] = hash[i - 1] + (s[i] - 'a' + 1) * poww[i];
}
li lcp(li x, li y){
li l = 1, r = min(n - y + 1, n - x + 1), ans = 0;
while(l <= r){
li mid = (l + r) >> 1;
li h1 = (hash[x + mid - 1] - hash[x - 1]) * poww[n - (x + mid - 1)];
li h2 = (hash[y + mid - 1] - hash[y - 1]) * poww[n - (y + mid - 1)];
if(h1 == h2){
ans = mid;
l = mid + 1;
} else r = mid - 1;
}
return ans;
}
};
struct runs{
li lenrun, lenstack, stack[1000010];
node run[2000010];
Hash h1, h2;
void get(string s){
string ss = s;
reverse(ss.begin() + 1, ss.end());
h1.work(s), h2.work(ss);
lenstack = 0;
li n = s.length() - 1;
stack[lenstack = 0] = n + 1;
for(li i = n; i; i--){
while(lenstack){
li x = min(stack[lenstack - 1] - stack[lenstack], stack[lenstack] - i);
li lcp = h1.lcp(i, stack[lenstack]);
lcp = min(x, lcp);
if((x == lcp && stack[lenstack - 1] - stack[lenstack] > stack[lenstack] - i) || (x > lcp && s[i + lcp] < s[stack[lenstack] + lcp])) lenstack--;
else break;
}
li j = stack[lenstack];
stack[++lenstack] = i;
li x = h2.lcp(n - i + 2, n - j + 2);
if(x < j - i){
li y = h1.lcp(i, j);
if(x + y >= j - i){
run[++lenrun] = {i - x, j + y - 1, j - i};
}
}
}
}
void work(string s){
lenrun = 0;
get(s);
for(li i = 0; i < s.length(); i++) s[i] = 'z' - (s[i] - 'a');
get(s);
sort(run + 1, run + 1 + lenrun);
lenrun = unique(run + 1, run + 1 + lenrun) - 1 - run;
}
} run;
int main(){
// freopen("wonderful.ans", "r", stdin);
// freopen("www.ww", "w", stdout);
poww[0] = 1;
for(li i = 1; i <= 1e6; i++) poww[i] = poww[i - 1] * base;
string s;
std::cin >> s;
s = " " + s;
run.work(s);
for(li i = 1; i <= run.lenrun; i++){
printf("%lld %lld %lld\n", run.run[i].l, run.run[i].r, run.run[i].p);
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 56ms
memory: 25576kb
input:
luynenolgrtkiqkdbpcoqsjyisilepmrkleqytdfmxrupcartchjwqhekspohcftpmkpfnwtmoqesqxluevqwewgylwgpdbgplwwbsqpigtayqmswjksngymtwulavrpjpomiedsmxtmpheoqogfwhtpdnaflsxwhlkrrnkfmfrcmvqelyjhfdylszqftndcynurbgwnnnrbkjfxioeptfaoervxgzzhovypdvfsiytviysqpzhkeiyibwhjviqjgpblmieugxroykgnloxpyyzzugirqbcwqdicloyulqij...
output:
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 869 1 9...
result:
wrong answer 1st lines differ - expected: '7394', found: '99 100 1'
Test #2:
score: 0
Wrong Answer
time: 27ms
memory: 27068kb
input:
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...
output:
1 200000 1
result:
wrong answer 1st lines differ - expected: '1', found: '1 200000 1'
Test #3:
score: 0
Wrong Answer
time: 61ms
memory: 27380kb
input:
bbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...
output:
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 2 21 24...
result:
wrong answer 1st lines differ - expected: '102706', found: '1 2 1'
Test #4:
score: 0
Wrong Answer
time: 62ms
memory: 23244kb
input:
dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcd...
output:
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 56 12 ...
result:
wrong answer 1st lines differ - expected: '69092', found: '1 28 12'
Test #5:
score: 0
Wrong Answer
time: 0ms
memory: 18108kb
input:
dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcba
output:
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:
wrong answer 1st lines differ - expected: '31', found: '1 28 12'
Test #6:
score: 0
Wrong Answer
time: 76ms
memory: 29432kb
input:
bbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...
output:
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 17 20 ...
result:
wrong answer 1st lines differ - expected: '140058', found: '1 2 1'
Test #7:
score: 0
Wrong Answer
time: 309ms
memory: 37600kb
input:
ghbaahxvveloseywqeuokpraqgyscdcimfioohjjnwyhdyftczjorapjhncjqetfjetxnfidbgkeesajrjxkkmutayescxxndtmryuubdgijyisstqefcayeycxccwpfpdypautdbbmblfvexakzakgzpfdrdtytyzkytfdwgqarxvyuvivysbzhgcakxbfwarwvxaufsuzprxjnhenbimlqoncmojkqbgoaiifaegpvdakmhxoplzfamkodtatwghwprerxkhtqhfcofqfqrnsgxgjsgcppmlgfrxdceyuo...
output:
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 781 782 ...
result:
wrong answer 1st lines differ - expected: '38316', found: '4 5 1'
Test #8:
score: 0
Wrong Answer
time: 159ms
memory: 44584kb
input:
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp...
output:
1 999998 1
result:
wrong answer 1st lines differ - expected: '1', found: '1 999998 1'
Test #9:
score: 0
Wrong Answer
time: 347ms
memory: 49780kb
input:
aababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...
output:
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 403782 15423...
result:
wrong answer 1st lines differ - expected: '513547', found: '1 2 1'
Test #10:
score: 0
Wrong Answer
time: 375ms
memory: 56036kb
input:
aababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...
output:
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 73051 2790...
result:
wrong answer 1st lines differ - expected: '700312', found: '1 2 1'