Task: | Repeating substring |
Sender: | Pohjantahti |
Submission time: | 2018-10-13 15:57:15 +0300 |
Language: | C++ |
Status: | READY |
Result: | TIME LIMIT EXCEEDED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.02 s | details |
#2 | ACCEPTED | 0.02 s | details |
#3 | ACCEPTED | 0.05 s | details |
#4 | ACCEPTED | 0.07 s | details |
#5 | ACCEPTED | 0.07 s | details |
#6 | ACCEPTED | 0.06 s | details |
#7 | ACCEPTED | 0.07 s | details |
#8 | ACCEPTED | 0.06 s | details |
#9 | ACCEPTED | 0.07 s | details |
#10 | ACCEPTED | 0.06 s | details |
#11 | TIME LIMIT EXCEEDED | -- | details |
#12 | UNKNOWN | -- | details |
#13 | UNKNOWN | -- | details |
#14 | UNKNOWN | -- | details |
#15 | UNKNOWN | -- | details |
Code
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("arch=skylake") #include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; typedef long long ll; int n; string str; vector<int> suffix(string s) { int N = n+256; vector<int> sa(n), ra(n); for (int i = 0; i < n; ++i) { sa[i] = i; ra[i] = (int)s[i]; } for (int k = 0; k < n; k?k*=2:k++) { vector<int> nsa(sa), nra(n), cnt(N); for (int i = 0; i < n; ++i) nsa[i] = (nsa[i]-k+n)%n; for (int i = 0; i < n; ++i) cnt[ra[i]]++; for (int i = 1; i < N; ++i) cnt[i] += cnt[i-1]; for (int i = n-1; i >= 0; --i) sa[--cnt[ra[nsa[i]]]] = nsa[i]; int r = 0; for (int i = 1; i < n; ++i) { if (ra[sa[i]] != ra[sa[i-1]]) r++; else if (ra[(sa[i]+k)%n] != ra[(sa[i-1]+k)%n]) r++; nra[sa[i]] = r; } ra = nra; } return sa; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> str; n = str.length(); vector<int> sa = suffix(str); int mxlen = 0; int mxi = -1; for (int i = 0; i < n-1; ++i) { int a = sa[i]; int b = sa[i+1]; int clen = 0; while (a < n && b < n && str[a] == str[b]) { a++; b++; clen++; } if (clen > mxlen) { mxlen = clen; mxi = sa[i]; } if (clen == n) break; } if (mxlen == 0) { cout << "\n"; return 0; } string res = str.substr(mxi, mxlen); cout << res << "\n"; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
abcdabcdabcd |
correct output |
---|
abcdabcd |
user output |
---|
abcdabcd |
Test 2
Verdict: ACCEPTED
input |
---|
abcdefghijklmnopqrstuvwxyz |
correct output |
---|
(empty) |
user output |
---|
(empty) |
Test 3
Verdict: ACCEPTED
input |
---|
yypqtdfbwzpfwsmjjagdjpfyqnyspk... |
correct output |
---|
cqkgus |
user output |
---|
cqkgus |
Test 4
Verdict: ACCEPTED
input |
---|
zwnqhornqkcmioyxxtkkwrbkorncjh... |
correct output |
---|
dywyvkf |
user output |
---|
dywyvkf |
Test 5
Verdict: ACCEPTED
input |
---|
fhnnpfcbnpnsigmvmklzvfluwvypyb... |
correct output |
---|
asjzge |
user output |
---|
asjzge |
Test 6
Verdict: ACCEPTED
input |
---|
daqyvtkjopactcbkghijgrpjghmefa... |
correct output |
---|
sowvwyy |
user output |
---|
sowvwyy |
Test 7
Verdict: ACCEPTED
input |
---|
ksdohlhpsupwqhoditrhvbansccnnh... |
correct output |
---|
devycn |
user output |
---|
devycn |
Test 8
Verdict: ACCEPTED
input |
---|
edhikrxqidgjpxnyytsfzylndslhyu... |
correct output |
---|
brmnvr |
user output |
---|
brmnvr |
Test 9
Verdict: ACCEPTED
input |
---|
hutihnlmghdovkmbelctafdqhldiyl... |
correct output |
---|
bbzhpo |
user output |
---|
bbzhpo |
Test 10
Verdict: ACCEPTED
input |
---|
ttyameoijyqaxrkvfqkxgrwigmalxw... |
correct output |
---|
cbahwtz |
user output |
---|
cbahwtz |
Test 11
Verdict: TIME LIMIT EXCEEDED
input |
---|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
correct output |
---|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
user output |
---|
(empty) |
Test 12
Verdict: UNKNOWN
input |
---|
a |
correct output |
---|
(empty) |
user output |
---|
(not available) |
Test 13
Verdict: UNKNOWN
input |
---|
aa |
correct output |
---|
a |
user output |
---|
(not available) |
Test 14
Verdict: UNKNOWN
input |
---|
ab |
correct output |
---|
(empty) |
user output |
---|
(not available) |
Test 15
Verdict: UNKNOWN
input |
---|
zz |
correct output |
---|
z |
user output |
---|
(not available) |