CSES - E4590 2018 5 - Results
Submission details
Task:Rotations
Sender:jong
Submission time:2018-10-13 17:31:11 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.02 sdetails
#6ACCEPTED0.06 sdetails
#7--details
#8UNKNOWN--details
#9UNKNOWN--details
#10UNKNOWN--details
#11UNKNOWN--details
#12UNKNOWN--details

Code

#include <iostream>

using namespace std;

int main() {

	string s;
	cin >> s;
	int n = s.length();

	char min = -1;
	/*for (int i=0; i<n; ++i)
		if (min == -1 || s[i] < min) min = s[i];*/

	int level = 0;
	int left = n;
	int arr[n];
	for(int i=0; i<n; ++i)
		arr[i] = i;
	int arr_it = 0;
	while (left > 1 && level<(n+1)/2) {
		min = -1;
		arr_it = 0;
		for (int i=0; i<left; ++i) {
			if (min == -1 || s[(arr[i]+level) % n] < min) {
				min = s[(arr[i]+level) % n];
			}
		}
		for (int i=0; i<left; ++i) {
			if (s[(arr[i]+level) % n] == min) {
				arr[arr_it] = arr[i];
				++arr_it;
			}
		}

		// Special case:
		if (level==0 && arr_it > (left+1)/2) {

			int curr_i=-1;
			int curr_c=0;
			int max_s=0;
			int max_si=-1;
			for (int i=0; i<left; ++i) {
				if (s[i] == min) {
					++curr_c;
					if (curr_i == -1) curr_i = i;
					if (curr_c > max_s) {
						max_s = curr_c;
						max_si = curr_i;
					}
				} else {
					curr_c = 0;
					curr_i = -1;
				}
			}

			int spref = 0; int ssuff = 0;
			int i=0;
			while (true) {
				if (s[i] == min) ++spref;
				else break;
				++i;
			}
			i=left-1;
			while (true) {
				if (s[i] == min) ++ssuff;
				else break;
				--i;
			}
			++i;
			if (spref + ssuff > max_s)
				cout << s.substr(i, n-i) << s.substr(0,i) << "\n";
			else
				cout << s.substr(max_si, n-max_si) << s.substr(0,max_si) << "\n";
			return 0;
		}

		//if (left > 5 && arr_it > (left+1)/2) {	// TODO: around! e.g. 'aabbaaabbaa'
			/*int maxs = 0;
			int maxsind = -1;
			int scount = 0;
			int currind = -1;

			for (int j=0; j<left; ++j) {
				if (s[(arr[j]+level) % n] == min) {
					++scount;
					if (scount > maxs) {
						if (currind == -1) currind = j;
						maxs = scount;
						maxsind = currind;
					}
				} else {
					scount = 0;
					currind = -1;
				}
			}

			cout << level << " " << maxsind << "\n";*/

			/*int pref = 0;
			int suff = 0;
			int j=0;
			int suffind = -1;
			while (true) {
				if (s[(arr[j] + level) % n] == min)
					++pref;
				else break;
				++j;
				if (j >= left) break;
			}
			j = left-1;
			while (true) {
				cout << "::" << j << " " << arr[j] << " " << s[(arr[j] + level) % n] << "\n";
				if (s[(arr[j] + level) % n] == min)
					++suff;
				else {
					cout << "!!!\n";
					suffind = j+1;
					break;
				}
				--j;
				if (j<0) break;
			}

			if (pref+suff > maxs) {
				cout << "! " << suffind << " " << arr[suffind] << "\n";
				cout << s.substr(arr[suffind], n-arr[suffind]) << s.substr(0,arr[suffind]) << "\n";
			}
			else*/
		/*
				cout << s.substr(arr[maxsind], n-arr[maxsind]) << s.substr(0,arr[maxsind]) << "\n";
			return 0;
		}*/
		left = arr_it;
		++level;
	}

	/*cout << arr[0] << "\n";
	for (int i=0;i<n;++i)
		cout << arr[i] << " ";
	cout << "\n";*/
	/*for (int i=0; i<n; ++i)
		cout << s[(arr[0] + i) % n];
	cout << "\n";*/
	cout << s.substr(arr[0], n-arr[0]) << s.substr(0,arr[0]) << "\n";
	
}

Test details

Test 1

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

Test 2

Verdict: ACCEPTED

input
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

correct output
abbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

user output
abbbbbbbbbbbbbbbbbbbbbbbbbbbbb...

Test 3

Verdict: ACCEPTED

input
jibanqfglkmsywdlqjquxxnqeyhbyu...

correct output
aaadptqmkuqxnvmojzhghqtfztbwsj...

user output
aaadptqmkuqxnvmojzhghqtfztbwsj...

Test 4

Verdict: ACCEPTED

input
muykjgvsstkgydmumitbgvsbtgyvmv...

correct output
aaaeaeipiqglrtbzelgrqmrxqbnjke...

user output
aaaeaeipiqglrtbzelgrqmrxqbnjke...

Test 5

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

Test 6

Verdict: ACCEPTED

input
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

correct output
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

user output
aaaaaaaaabaaaaaaaaabaaaaaaaaab...

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)