CSES - Datatähti Open 2021 - Results
Submission details
Task:Split in Three
Sender:lolok123
Submission time:2021-01-31 10:07:06 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED22
#2ACCEPTED78
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2details
#2ACCEPTED0.01 s1, 2details
#3ACCEPTED0.01 s1, 2details
#4ACCEPTED0.01 s1, 2details
#5ACCEPTED0.01 s1, 2details
#6ACCEPTED0.01 s1, 2details
#7ACCEPTED0.01 s1, 2details
#8ACCEPTED0.01 s1, 2details
#9ACCEPTED0.01 s2details
#10ACCEPTED0.01 s2details
#11ACCEPTED0.01 s2details
#12ACCEPTED0.01 s2details
#13ACCEPTED0.01 s2details
#14ACCEPTED0.01 s2details
#15ACCEPTED0.01 s2details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:55:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0; j<fin[i].size(); ++j){
                ~^~~~~~~~~~~~~~

Code

#define MOD 1000000007
#include <bits/stdc++.h>
#include <numeric>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n;
	array<pair<long long int,int>,3> s;
	fill(s.begin(),s.end(),make_pair(0,0));
	array<int,6> arr={2,1,0,0,1,2};
	array<vector<int>,3> fin;
	cin>>n;
	vector<int> ans(n);
	if((n+1)%3==0){
		if(n%2==0){
			fin[0].push_back(0);
			fin[1].push_back(1);
			for(int i=2; i<n; ++i){
				fin[arr[(i-2)%6]].push_back(i);
			}
		}
		else{
			fin[0].push_back(0);
			fin[0].push_back(1);
			for(int i=2; i<n; ++i){
				fin[arr[(i-2)%6]].push_back(n-i+1);
			}
		}
	}
	else if(n%3==0){
		if(n%2==0){
			fin[1].push_back(0);
			for(int i=1; i<n; ++i){
				fin[arr[i%6]].push_back(i);
			}
		}
		else{
			for(int i=0; i<n; ++i){
				fin[arr[i%6]].push_back(i);
			}
		}
	}
	else{
		cout<<"IMPOSSIBLE"<<endl;
		return 0;
	}
	for(int i=0; i<3; ++i){
		s[i].second=i;
		for(int j=0; j<fin[i].size(); ++j){
			s[i].first+=fin[i][j]+1;
		}
	}
	sort(s.begin(),s.end());
	for(int i=0; i<3; ++i){
		for(auto &j:fin[s[i].second]){
			ans[j]=i+1;
		}
	}
	for(int i=0; i<n; ++i){
		cout<<ans[i]<<' ';
	}
	cout<<endl;
}

Test details

Test 1

Group: 1, 2

Verdict: ACCEPTED

input
3

correct output
1 2 3 

user output
1 2 3 

Test 2

Group: 1, 2

Verdict: ACCEPTED

input
4

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Group: 1, 2

Verdict: ACCEPTED

input
5

correct output
1 3 1 3 2 

user output
3 3 3 1 2 

Test 4

Group: 1, 2

Verdict: ACCEPTED

input
6

correct output
1 3 2 2 1 3 

user output
3 3 2 2 3 1 

Test 5

Group: 1, 2

Verdict: ACCEPTED

input
7

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 1, 2

Verdict: ACCEPTED

input
8

correct output
2 3 1 2 3 3 2 1 

user output
2 3 1 3 2 2 3 1 

Test 7

Group: 1, 2

Verdict: ACCEPTED

input
9

correct output
1 2 3 1 2 3 3 2 1 

user output
1 2 3 3 2 1 1 2 3 

Test 8

Group: 1, 2

Verdict: ACCEPTED

input
10

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 9

Group: 2

Verdict: ACCEPTED

input
42

correct output
1 3 2 2 1 3 1 2 3 3 2 1 1 2 3 ...

user output
3 3 2 2 3 1 1 3 2 2 3 1 1 3 2 ...

Test 10

Group: 2

Verdict: ACCEPTED

input
95

correct output
1 3 1 3 2 1 2 3 3 2 1 1 2 3 3 ...

user output
3 3 3 1 2 2 1 3 3 1 2 2 1 3 3 ...
Truncated

Test 11

Group: 2

Verdict: ACCEPTED

input
96

correct output
1 3 2 2 1 3 1 2 3 3 2 1 1 2 3 ...

user output
3 3 2 2 3 1 1 3 2 2 3 1 1 3 2 ...
Truncated

Test 12

Group: 2

Verdict: ACCEPTED

input
97

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 13

Group: 2

Verdict: ACCEPTED

input
98

correct output
2 3 1 2 3 3 2 1 1 2 3 3 2 1 1 ...

user output
2 3 1 3 2 2 3 1 1 3 2 2 3 1 1 ...
Truncated

Test 14

Group: 2

Verdict: ACCEPTED

input
99

correct output
1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 ...

user output
1 2 3 3 2 1 1 2 3 3 2 1 1 2 3 ...
Truncated

Test 15

Group: 2

Verdict: ACCEPTED

input
100

correct output
IMPOSSIBLE

user output
IMPOSSIBLE