QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#481300 | #21648. Runs | ucup-team902# | 50 | 370ms | 19564kb | C++17 | 2.6kb | 2024-07-16 23:10:08 | 2024-07-16 23:10:09 |
Judging History
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);
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))
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))
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: 37ms
memory: 8752kb
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: 36ms
memory: 7912kb
input:
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...
output:
1 1 200000 1
result:
ok 2 lines
Test #3:
score: 0
Wrong Answer
time: 281ms
memory: 15188kb
input:
bbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccabbccaaababbbbccaaababbbbccabbccaaababbbbccaaaba...
output:
102707 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:
wrong answer 1st lines differ - expected: '102706', found: '102707'
Test #4:
score: 0
Wrong Answer
time: 208ms
memory: 9432kb
input:
dcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcddcbadcbaabcdabcddcbaabcdabcddcbadcbaabcdabcd...
output:
67294 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:
wrong answer 1st lines differ - expected: '69092', found: '67294'
Test #5:
score: 10
Accepted
time: 1ms
memory: 5628kb
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: 0
Wrong Answer
time: 370ms
memory: 18944kb
input:
bbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbabaababaababbbbabaababaababbbbabbbaba...
output:
140059 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:
wrong answer 1st lines differ - expected: '140058', found: '140059'
Test #7:
score: 10
Accepted
time: 244ms
memory: 13640kb
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: 190ms
memory: 19564kb
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...