CSES - Datatähti 2025 loppu - Results
Submission details
Task:Permutaatio
Sender:aatukaj
Submission time:2025-01-18 15:12:31 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED33
#3ACCEPTED55
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3details
#2ACCEPTED0.01 s1, 2, 3details
#3ACCEPTED0.01 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#6ACCEPTED0.01 s1, 2, 3details
#7ACCEPTED0.01 s1, 2, 3details
#8ACCEPTED0.01 s1, 2, 3details
#9ACCEPTED0.01 s1, 2, 3details
#10ACCEPTED0.01 s1, 2, 3details
#11ACCEPTED0.01 s2, 3details
#12ACCEPTED0.01 s2, 3details
#13ACCEPTED0.01 s2, 3details
#14ACCEPTED0.01 s2, 3details
#15ACCEPTED0.01 s2, 3details
#16ACCEPTED0.19 s3details
#17ACCEPTED0.19 s3details
#18ACCEPTED0.16 s3details
#19ACCEPTED0.17 s3details
#20ACCEPTED0.10 s3details
#21ACCEPTED0.01 s1, 2, 3details
#22ACCEPTED0.01 s2, 3details
#23ACCEPTED0.13 s3details

Code

#include <bits/stdc++.h> 
#define all(v) (v).begin(), (v).end()
using namespace std;
const int maxN = 2e5+10;
int a[maxN], b[maxN];
vector<int> adj[maxN];
int prv[maxN];
int first[maxN];

bool ok = true;
int vis[maxN];
vector<int> topo;
int ans[maxN];
void dfs(int v) {
	vis[v] = 2;
	for (auto u: adj[v]) {
		if (u==v) continue;
		if (vis[u]==2) {
			ok = false;
			break;
		}
		if (!vis[u]) dfs(u);
	}
	vis[v] = 1;
	topo.push_back(v);
}
void solve() {
	int n;
	cin >> n;
	for (int i=0; i<n; i++) cin >> a[i];
	for (int i=0; i<n; i++) cin >> b[i];
	// toposor tez
	
	for (int i=1; i<=n; i++) prv[i] = -1; 
	for (int i=0; i<n; i++) {
		if (a[i]!=1) {
			if (prv[a[i]-1]==-1) {
				cout << "IMPOSSIBLE\n";
				return;
			}
			adj[i].push_back(prv[a[i]-1]);
		}
		prv[a[i]] = i;
	}

	for (int i=1; i<=n; i++) prv[i] = -1; 
	for (int i=n-1; i>=0; i--) {
		if (prv[a[i]]!=-1) {
			adj[i].push_back(prv[a[i]]);
		}
		prv[a[i]] = i;
	}

	for (int i=1; i<=n; i++) prv[i] = -1; 
	for (int i=n-1; i>=0; i--) {
		if (b[i]!=1) {
			if (prv[b[i]-1]==-1) {
				cout << "IMPOSSIBLE\n";
				return;
			}
			adj[i].push_back(prv[b[i]-1]);
		}
		prv[b[i]] = i;
	}

	for (int i=1; i<=n; i++) prv[i] = -1; 
	for (int i=0; i<n; i++) {
		if (prv[b[i]]!=-1) {
			adj[i].push_back(prv[b[i]]);
		}
		prv[b[i]] = i;
	}

	for (int i=0; i<n; i++) {
		sort(all(adj[i]));
		adj[i].erase(unique(all(adj[i])), adj[i].end());
	}

	for (int i=0; i<n; i++) {
		if (!vis[i]) dfs(i);
	}
	if (!ok) {
		cout << "IMPOSSIBLE\n";
		return;
	}

	cout << '\n';
	reverse(all(topo));
	for (int i=0; i<n; i++) {
		ans[topo[i]] = n-i;
	}
	for (int i=0; i<n; i++) cout << ans[i] << ' ';
	cout << '\n';
}
int main() {
	solve();
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
1
1
1

correct output

user output


Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
2
1 1
1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 1 3
3 2 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 3 2
2 1 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
5
1 2 3 4 5
2 1 1 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 2 2 3 2 3 4 5
1 3 2 2 1 1 1 1

correct output
1 8 5 7 2 3 4 6 

user output

1 4 3 6 2 5 7 8 

Test 7

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 2 2 2 1 3 2 1
3 5 4 3 2 3 2 1

correct output
3 8 6 5 2 7 4 1 

user output

3 7 6 5 2 8 4 1 

Test 8

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 2 3 4 5 6 7 8
1 1 1 1 1 1 1 1

correct output
1 2 3 4 5 6 7 8 

user output

1 2 3 4 5 6 7 8 

Test 9

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 1 1 1 1 1 1 1
8 7 6 5 4 3 2 1

correct output
8 7 6 5 4 3 2 1 

user output

8 7 6 5 4 3 2 1 

Test 10

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 11

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 2 3 4 4 5 4 6 4 7 8 5 7 9 ...

correct output
25 205 54 76 500 218 316 181 3...

user output

8 113 39 44 293 117 201 107 20...
Truncated

Test 12

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 3 1 1 2 2 4 1 3 5 3 3 3 4 ...

correct output
336 388 404 309 233 377 240 42...

user output

140 182 223 139 126 181 127 22...
Truncated

Test 13

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output

1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 14

Group: 2, 3

Verdict: ACCEPTED

input
500
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
500 499 498 497 496 495 494 49...

user output

500 499 498 497 496 495 494 49...
Truncated

Test 15

Group: 2, 3

Verdict: ACCEPTED

input
500
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 16

Group: 3

Verdict: ACCEPTED

input
200000
1 2 2 3 2 1 3 3 2 4 2 3 5 4 5 ...

correct output
12162 165274 130162 168624 391...

user output

6252 81401 74675 81433 22717 2...
Truncated

Test 17

Group: 3

Verdict: ACCEPTED

input
200000
1 1 2 3 3 2 4 3 4 5 2 5 6 7 3 ...

correct output
191389 13806 133836 173924 159...

user output

102726 6495 71905 101144 84163...
Truncated

Test 18

Group: 3

Verdict: ACCEPTED

input
200000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output

1 2 3 4 5 6 7 8 9 10 11 12 13 ...
Truncated

Test 19

Group: 3

Verdict: ACCEPTED

input
200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
200000 199999 199998 199997 19...

user output

200000 199999 199998 199997 19...
Truncated

Test 20

Group: 3

Verdict: ACCEPTED

input
200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 21

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 1 2 1 2 3 1 3
4 3 3 2 2 3 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 22

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 3 2 1 2 1 2 3 3 3 3 4 1 5 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 23

Group: 3

Verdict: ACCEPTED

input
200000
1 1 1 2 2 3 1 3 4 1 5 4 2 5 6 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE