QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#481298#21648. Runsucup-team902#80 365ms26648kbC++142.7kb2024-07-16 23:08:322024-07-16 23:08:32

Judging History

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

  • [2024-07-16 23:08:32]
  • 评测
  • 测评结果:80
  • 用时:365ms
  • 内存:26648kb
  • [2024-07-16 23:08:32]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
struct Runs {
    int l, r, p;
};
const int maxn = 1e6 + 5;
char t[maxn];
int m;
namespace getRuns {
struct Hash {
    int p[maxn], h[maxn];
    int mod, buf;
    Hash(int _buf, int _mod) {
        buf = _buf;
        mod = _mod;
    }
    void Init(char *s, int n) {
        p[0] = 1;
        h[0] = 0;
        for (int i = 1; i <= n; i++) {
            p[i] = 1ll * p[i - 1] * buf % mod;
            h[i] = (1ll * h[i - 1] * buf % mod + s[i] - 'a' + 1) % mod;
        }
    }
    bool tl(int u, int v, int len) {
        return (h[u] - h[v] + mod + 1ll * (h[v - len] - h[u - len] + mod) % mod * p[len] % mod) % mod == 0;
    }
    bool tr(int u, int v, int len) {
        return (h[u + len - 1] - h[v + len - 1] + mod + 1ll * (h[v - 1] - h[u - 1] + mod) % mod * p[len] % mod) % mod == 0;
    }
    long long get(int l, int r) {
        return (h[r] - 1ll * h[l - 1] * p[r - l + 1] % mod + mod) % mod;
    }
} h1(31, 19260817), h2(79, 1e9 + 7);

int extl(int u, int v) {
    if (t[u] != t[v])
        return 0;
    int l = 1, r = min(u, v), mid;
    while (l < r) {
        mid = (l + r + 1) >> 1;
        if (h1.tl(u, v, mid) && h2.tl(u, v, mid))
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}
int extr(int u, int v) {
    if (t[u] != t[v])
        return 0;
    int l = 1, r = m - max(u, v) + 1, mid;
    while (l < r) {
        mid = (l + r + 1) >> 1;
        if (h1.tr(u, v, mid) && h2.tr(u, v, mid))
            l = mid;
        else
            r = mid - 1;
    }
    return l;
}
vector<Runs> raw_runs(0);
int chk(int u, int v) {
    int tl = extl(u, v), tr = extr(u, v);
    if (tl + tr >= v - u + 1) {
        raw_runs.push_back({u - tl + 1, v + tr - 1, v - u});
        return v + tr - 1;
    }
    return 0;
}
vector<Runs> init() {
    vector<Runs> b(0);
    for (int p = 1; p <= m; p++)
        for (int k = p, mx = 0; k + p <= m; k += p)
            if (mx < k)
                mx = max(mx, chk(k, k + p) - p);
    sort(raw_runs.begin(), raw_runs.end(), [](const Runs &A, const Runs &B) { return A.l == B.l ? (A.r == B.r ? A.p < B.p : A.r < B.r) : A.l < B.l; });
    for (const Runs &r : raw_runs)
        if (b.empty() || r.l != b.back().l || r.r != b.back().r)
            b.push_back(r);
    return b;
}
}  // namespace getRuns
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> (t + 1);
    m = strlen(t + 1);
    getRuns::h1.Init(t, m);
    getRuns::h2.Init(t, m);
    vector<Runs>
        ans = getRuns::init();
    cout << (int)ans.size() << endl;
    for (auto [l, r, p] : ans) cout << l << " " << r << " " << p << endl;
}

详细

Test #1:

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

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: 60ms
memory: 13900kb

input:

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...

output:

1
1 200000 1

result:

ok 2 lines

Test #3:

score: 10
Accepted
time: 251ms
memory: 13864kb

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: 170ms
memory: 22764kb

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: 9788kb

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: 365ms
memory: 19948kb

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: 248ms
memory: 21580kb

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: 10
Accepted
time: 341ms
memory: 26648kb

input:

pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp...

output:

1
1 999998 1

result:

ok 2 lines

Test #9:

score: 0
Time Limit Exceeded

input:

aababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

aababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...

output:


result: