QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#479249#21648. RunsjuruoA#0 375ms56036kbC++145.2kb2024-07-15 16:07:542024-07-15 16:07:56

Judging History

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

  • [2024-07-15 16:07:56]
  • 评测
  • 测评结果:0
  • 用时:375ms
  • 内存:56036kb
  • [2024-07-15 16:07:54]
  • 提交

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'