Submission details
Task:Rotations
Sender:Ollie
Submission time:2016-10-22 20:00:32 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1--details
#2--details
#3ACCEPTED0.41 sdetails
#4ACCEPTED0.43 sdetails
#5ACCEPTED0.38 sdetails
#6--details
#7--details
#8UNKNOWN--details
#9UNKNOWN--details
#10UNKNOWN--details
#11UNKNOWN--details
#12UNKNOWN--details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:40:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(s.length()-vec[i]<rl) i++;
                           ^

Code

#include <bits/stdc++.h>

using namespace std;

vector<int> suffix_array(string& str) {
  if(str.length()==0)
    return vector<int>();

  vector<int> cur;
  for(auto c : str) cur.push_back(c);
  int n = cur.size();
  for(int length=1;;length*=2) {
    vector<pair<pair<int,int>,int>> pairs(n); // pair, original, position index
    for(int i=0;i<n;i++) {
      pair<int,int> new_pair = {cur[i], i+length<n?cur[i+length]:-1};
      pairs[i] = {new_pair, i};
    }
    sort(pairs.begin(), pairs.end());
    int code = 0;
    for(int i=0;i<n;i++) {
      if(i!=0&&pairs[i].first!=pairs[i-1].first) 
        code++;
      cur[pairs[i].second]=code;
    }
    if(code==n-1) {
      vector<int> result(n);
      for(int i=0;i<n;i++)
        result[i] = pairs[i].second;
      return result;
    }
  }
}

int main() {
  string s;
  cin >> s;
  int rl = s.length(), i=0;
  s += s;
  auto vec = suffix_array(s);
  while(s.length()-vec[i]<rl) i++;
  cout << s.substr(vec[i], rl) << endl;
  return 0;
}

Test details

Test 1

Verdict:

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
(empty)

Test 2

Verdict:

input
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
abbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

user output
(empty)

Test 3

Verdict: ACCEPTED

input
jibanqfglkmsywdlqjquxxnqeyhbyu...

correct output
aaadptqmkuqxnvmojzhghqtfztbwsj...

user output
aaadptqmkuqxnvmojzhghqtfztbwsj...
Truncated

Test 4

Verdict: ACCEPTED

input
muykjgvsstkgydmumitbgvsbtgyvmv...

correct output
aaaeaeipiqglrtbzelgrqmrxqbnjke...

user output
aaaeaeipiqglrtbzelgrqmrxqbnjke...
Truncated

Test 5

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
Truncated

Test 6

Verdict:

input
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

correct output
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

user output
(empty)

Test 7

Verdict:

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)