| Task: | Rotations |
| Sender: | Ollie |
| Submission time: | 2016-10-23 00:09:06 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | RUNTIME ERROR |
| test | verdict | time | |
|---|---|---|---|
| #1 | RUNTIME ERROR | 0.27 s | details |
| #2 | RUNTIME ERROR | 0.20 s | details |
| #3 | RUNTIME ERROR | 0.18 s | details |
| #4 | RUNTIME ERROR | 0.19 s | details |
| #5 | RUNTIME ERROR | 0.20 s | details |
| #6 | RUNTIME ERROR | 0.25 s | details |
| #7 | RUNTIME ERROR | 0.29 s | details |
| #8 | UNKNOWN | -- | details |
| #9 | UNKNOWN | -- | details |
| #10 | UNKNOWN | -- | details |
| #11 | UNKNOWN | -- | details |
| #12 | UNKNOWN | -- | details |
Compiler report
input/code.cpp: In function 'bool leq(int, int, int, int)':
input/code.cpp:4:32: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
return(a1 < b1 || a1 == b1 && a2 <= b2);
^
input/code.cpp: In function 'bool leq(int, int, int, int, int, int)':
input/code.cpp:7:32: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
return(a1 < b1 || a1 == b1 && leq(a2,a3, b2,b3));
^
input/code.cpp: In function 'int main()':
input/code.cpp:86:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(s.length()-suff[i]<rl) i++;
^Code
#include <bits/stdc++.h>
using namespace std;
inline bool leq(int a1, int a2, int b1, int b2) {
return(a1 < b1 || a1 == b1 && a2 <= b2);
}
inline bool leq(int a1, int a2, int a3, int b1, int b2, int b3) {
return(a1 < b1 || a1 == b1 && leq(a2,a3, b2,b3));
}
static void radixPass(int* a, int* b, int* r, int n, int K) {
int* c = new int[K + 1];
for (int i = 0; i <= K; i++) c[i] = 0;
for (int i = 0; i < n; i++) c[r[a[i]]]++;
for (int i = 0, sum = 0; i <= K; i++) {
int t = c[i];
c[i] = sum;
sum += t;
}
for (int i = 0; i < n; i++) b[c[r[a[i]]]++] = a[i];
delete [] c;
}
void suffixArray(int* s, int* SA, int n, int K) {
int n0 = (n+2)/3, n1 = (n+1)/3, n2 = n/3, n02 = n0+n2;
int* s12 = new int[n02+3]; s12[n02] = s12[n02+1] = s12[n02+2] = 0;
int* SA12 = new int[n02+3]; SA12[n02] = SA12[n02+1] = SA12[n02+2] = 0;
int* s0 = new int[n0];
int* SA0 = new int[n0];
for (int i=0, j=0; i < n + (n0-n1); i++)
if (i%3 != 0) s12[j++] = i;
radixPass(s12 , SA12, s+2, n02, K);
radixPass(SA12, s12 , s+1, n02, K);
radixPass(s12 , SA12, s , n02, K);
int name = 0, c0 = -1, c1 = -1, c2 = -1;
for (int i = 0; i < n02; i++) {
if (s[SA12[i]] != c0 || s[SA12[i]+1] != c1 || s[SA12[i]+2] != c2) {
name++;
c0 = s[SA12[i]];
c1 = s[SA12[i]+1];
c2 = s[SA12[i]+2];
}
if (SA12[i]%3 == 1) s12[SA12[i]/3] = name;
else s12[SA12[i]/3 + n0] = name;
}
if (name < n02) {
suffixArray(s12, SA12, n02, name);
for (int i = 0; i < n02; i++) s12[SA12[i]] = i + 1;
} else
for (int i = 0; i < n02; i++) SA12[s12[i] - 1] = i;
for (int i = 0, j = 0; i < n02; i++)
if (SA12[i] < n0) s0[j++] = 3*SA12[i];
radixPass(s0, SA0, s, n0, K);
for (int p = 0, t = n0-n1, k = 0; k < n; k++) {
#define GetI() (SA12[t] < n0 ? SA12[t] * 3 + 1 : (SA12[t] - n0) * 3 + 2)
int i = GetI();
int j = SA0[p];
if (SA12[t] < n0 ?
leq(s[i], s12[SA12[t] + n0], s[j], s12[j/3]) :
leq(s[i],s[i+1],s12[SA12[t]-n0+1], s[j],s[j+1],s12[j/3+n0]))
{
SA[k] = i; t++;
if (t == n02)
for (k++; p < n0; p++, k++) SA[k] = SA0[p];
} else {
SA[k] = j; p++;
if (p == n0)
for (k++; t < n02; t++, k++) SA[k] = GetI();
}
}
delete [] s12; delete [] SA12; delete [] SA0; delete [] s0;
}
int main() {
string s;
cin >> s;
if(s.length()==1) {
cout<<s<<endl;
return 0;
} else if(s.length()==2) {
cout<<min(s[0],s[1])<<max(s[0],s[1])<<endl;
return 0;
}
int rl = s.length(), i=0;
s += s;
int n=s.length();
int suff[100001], vals[100001];
for(int i=0;i<n;i++) vals[i]=s[i];
suffixArray(vals, suff, n+1, 256);
while(s.length()-suff[i]<rl) i++;
cout << s.substr(suff[i], rl) << endl;
return 0;
}Test details
Test 1
Verdict: RUNTIME ERROR
| input |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| correct output |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| user output |
|---|
| (empty) |
Test 2
Verdict: RUNTIME ERROR
| input |
|---|
| bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb... |
| correct output |
|---|
| abbbbbbbbbbbbbbbbbbbbbbbbbbbbb... |
| user output |
|---|
| (empty) |
Test 3
Verdict: RUNTIME ERROR
| input |
|---|
| jibanqfglkmsywdlqjquxxnqeyhbyu... |
| correct output |
|---|
| aaadptqmkuqxnvmojzhghqtfztbwsj... |
| user output |
|---|
| (empty) |
Test 4
Verdict: RUNTIME ERROR
| input |
|---|
| muykjgvsstkgydmumitbgvsbtgyvmv... |
| correct output |
|---|
| aaaeaeipiqglrtbzelgrqmrxqbnjke... |
| user output |
|---|
| (empty) |
Test 5
Verdict: RUNTIME ERROR
| input |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| correct output |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| user output |
|---|
| (empty) |
Test 6
Verdict: RUNTIME ERROR
| input |
|---|
| aaaaaaaaabaaaaaaaaabaaaaaaaaab... |
| correct output |
|---|
| aaaaaaaaabaaaaaaaaabaaaaaaaaab... |
| user output |
|---|
| (empty) |
Test 7
Verdict: RUNTIME ERROR
| input |
|---|
| jtcbpjizbiauauipwsdteaisynwesj... |
| correct output |
|---|
| aisynwesjvtvgghnbqyqprwpfqayzl... |
| user output |
|---|
| (empty) |
Test 8
Verdict: UNKNOWN
| input |
|---|
| a |
| correct output |
|---|
| a |
| user output |
|---|
| (not available) |
Test 9
Verdict: UNKNOWN
| input |
|---|
| ab |
| correct output |
|---|
| ab |
| user output |
|---|
| (not available) |
Test 10
Verdict: UNKNOWN
| input |
|---|
| ba |
| correct output |
|---|
| ab |
| user output |
|---|
| (not available) |
Test 11
Verdict: UNKNOWN
| input |
|---|
| home |
| correct output |
|---|
| ehom |
| user output |
|---|
| (not available) |
Test 12
Verdict: UNKNOWN
| input |
|---|
| baaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| correct output |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| user output |
|---|
| (not available) |
