CSES - NOI 2019 - Results
Submission details
Task:Thieves and Prisons
Sender:Filip Björnåsen
Submission time:2019-03-06 16:25:33 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED8
#2ACCEPTED13
#3ACCEPTED14
#4ACCEPTED18
#5ACCEPTED47
Test results
testverdicttimegroup
#1ACCEPTED0.01 s2, 4, 5details
#2ACCEPTED0.01 s2, 4, 5details
#3ACCEPTED0.02 s2, 4, 5details
#4ACCEPTED0.01 s2, 4, 5details
#5ACCEPTED0.02 s2, 4, 5details
#6ACCEPTED0.02 s4, 5details
#7ACCEPTED0.02 s4, 5details
#8ACCEPTED0.02 s4, 5details
#9ACCEPTED0.02 s1, 3, 4, 5details
#10ACCEPTED0.01 s1, 3, 4, 5details
#11ACCEPTED0.02 s1, 3, 4, 5details
#12ACCEPTED0.01 s1, 3, 4, 5details
#13ACCEPTED0.02 s1, 3, 4, 5details
#14ACCEPTED0.02 s1, 3, 4, 5details
#15ACCEPTED0.01 s1, 3, 4, 5details
#16ACCEPTED0.02 s1, 3, 4, 5details
#17ACCEPTED0.01 s1, 2, 3, 4, 5details
#18ACCEPTED0.02 s1, 3, 4, 5details
#19ACCEPTED0.11 s2, 5details
#20ACCEPTED0.12 s2, 5details
#21ACCEPTED0.12 s2, 5details
#22ACCEPTED0.10 s5details
#23ACCEPTED0.10 s5details
#24ACCEPTED0.01 s3, 4, 5details
#25ACCEPTED0.02 s3, 4, 5details
#26ACCEPTED0.02 s3, 4, 5details
#27ACCEPTED0.03 s3, 4, 5details
#28ACCEPTED0.02 s4, 5details
#29ACCEPTED0.01 s4, 5details
#30ACCEPTED0.01 s4, 5details
#31ACCEPTED0.01 s4, 5details
#32ACCEPTED0.01 s2, 4, 5details
#33ACCEPTED0.02 s2, 4, 5details
#34ACCEPTED0.03 s2, 4, 5details
#35ACCEPTED0.01 s2, 4, 5details
#36ACCEPTED0.11 s3, 5details
#37ACCEPTED0.12 s3, 5details
#38ACCEPTED0.12 s3, 5details
#39ACCEPTED0.12 s3, 5details
#40ACCEPTED0.13 s5details
#41ACCEPTED0.13 s5details
#42ACCEPTED0.13 s5details
#43ACCEPTED0.12 s5details
#44ACCEPTED0.12 s2, 5details
#45ACCEPTED0.13 s2, 5details
#46ACCEPTED0.14 s2, 5details
#47ACCEPTED0.14 s2, 5details

Compiler report

input/code.cpp:3:0: warning: ignoring #pragma region Libraries [-Wunknown-pragmas]
 #pragma region Libraries
 
input/code.cpp:19:0: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
 #pragma endregion

Code

using namespace std;

#pragma region Libraries

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <cstring>
#include <iomanip>

#pragma endregion

#define MP make_pair
#define all(v) v.begin(), v.end()
#define trav(it,v) for (auto it = v.begin(); it != v.end(); it++)
#define rep(index, from, to) for (int index = from; index < to; index++)
#define ll long long
#define pi pair<int,int>

int32_t main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
	int n, k, m;
	cin >> n >> k >> m;
	vector<pair<char, int>> mo(m);
	vector<stack<int>> ca(n, stack<int>());
	for (int i = 0; i < m; i++)
	{
		cin >> mo[i].first >> mo[i].second;
		mo[i].second--;

		if (mo[i].first == 'C') {
			ca[mo[i].second].push(i);
		}
	}
	priority_queue<pair<int, int>> pq;
	for (int i = 0; i < n; i++)
	{
		if (ca[i].size()) {
			pq.push(MP(ca[i].top(), i));
			ca[i].pop();
		}
	}
	reverse(all(mo));
	vector<int> ans(m);
	unordered_set<int> avapri;
	for (int i = 0; i < k; i++)
	{
		avapri.insert(i + 1);
	}
	int prev = 1;
	for (int i = 0; i < m; i++)
	{
		if (mo[i].first == 'O') {
			if (avapri.size() == 0) {
				cout << "IMPOSSIBLE" << endl;
				return 0;
			}
			int pri = *avapri.begin();
			avapri.erase(pri);
			while (pq.size() && (m - pq.top().first - 1 < i || ans[m - pq.top().first - 1] != 0)) {
				pair<int, int> p = pq.top();
				pq.pop();
				if (ca[p.second].size() > 0) {
					pq.push(MP(ca[p.second].top(), p.second));
					ca[p.second].pop();
				}
			}
			if (pq.size() == 0 || (pq.size() == 1 && pq.top().second == mo[i].second)) {
				cout << "IMPOSSIBLE" << endl;
				return 0;
			}
			else if (pq.size() == 1 || mo[i].second != pq.top().second) {
				pair<int, int> p = pq.top();
				pq.pop();
				ans[m - 1 - p.first] = pri;
				ans[i] = pri;
				if (ca[p.second].size() > 0) {
					pq.push(MP(ca[p.second].top(), p.second));
					ca[p.second].pop();
				}
			}
			else {
				if (pq.top().second == mo[i].second) {
					pair<int, int> temp = pq.top();
					pq.pop();
					pair<int, int> p = pq.top();
					pq.pop();
					ans[m - p.first - 1] = pri;
					ans[i] = pri;
					if (ca[p.second].size() > 0) {
						pq.push(MP(ca[p.second].top(), p.second));
						ca[p.second].pop();
					}
					pq.push(temp);
				}
			}
			prev = pri;
		}
		else {
			if (ans[i] != 0) {
				avapri.insert(ans[i]);
				continue;
			}
			ans[i] = prev;
		}
	}
	reverse(all(ans));
	reverse(all(mo));
	vector<vector<int>> prison(k + 1, vector<int>());
	vector<bool> inpri(n);
	for (int i = 0; i < m; i++)
	{
		if (inpri[mo[i].second]) {
			cout << "IMPOSSIBLE" << endl;
			return 0;
		}
		if (mo[i].first == 'O') {
			if (prison[ans[i]].size() == 0) {
				cout << "IMPOSSIBLE" << endl;
				return 0;
			}
			trav(it, prison[ans[i]]) {
				inpri[*it] = 0;
			}
			prison[ans[i]].clear();
		}
		else {
			prison[ans[i]].push_back(mo[i].second);
			inpri[mo[i].second] = 1;
		}
	}
	for (int i = 0; i < m; i++)
	{
		cout << ans[i] << " ";
	}


#ifdef _DEBUG
	system("pause");
#endif // _DEBUG
	return 0;
}

Test details

Test 1

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 1
C 1

correct output

user output

Test 2

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
C 1
C 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Group: 2, 4, 5

Verdict: ACCEPTED

input
1 1 2
O 1
C 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
C 2

correct output
1 1 

user output
1 1 

Test 7

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
O 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 8

Group: 4, 5

Verdict: ACCEPTED

input
2 1 2
C 1
O 2

correct output
1 1 

user output
1 1 

Test 9

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
C 1
...

correct output
1 1 1 1 1 

user output
2 2 2 1 1 

Test 10

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
O 3
...

correct output
2 1 2 1 1 

user output
1 2 1 2 1 

Test 11

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 3
O 1
...

correct output
2 1 2 1 1 

user output
1 2 1 2 1 

Test 12

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 5
C 1
C 2
O 1
O 3
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 13

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 4
C 1
O 2
C 1
O 3

correct output
1 1 1 1 

user output
2 2 2 2 

Test 14

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 4
C 1
O 2
C 2
O 1

correct output
1 1 1 1 

user output
2 2 2 2 

Test 15

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 3
C 1
C 2
C 3

correct output
1 1 1 

user output
1 1 1 

Test 16

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
3 2 3
O 1
C 2
C 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 17

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
2 2 7
C 1
O 2
O 2
O 2
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 18

Group: 1, 3, 4, 5

Verdict: ACCEPTED

input
4 2 5
C 2
O 3
C 1
O 4
...

correct output
1 1 1 1 1 

user output
2 2 2 2 1 

Test 19

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
50000 49999 49998 49997 49996 ...

user output
23067 23068 23069 23070 23071 ...
Truncated

Test 20

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
100000 100000 100000 100000 10...
Truncated

Test 21

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 1
C 2
C 3
C 4
...

correct output
20000 20000 20000 20000 20000 ...

user output
80001 80001 80001 80001 80001 ...
Truncated

Test 22

Group: 5

Verdict: ACCEPTED

input
100000 100 100000
C 1
C 2
C 3
C 4
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
78 78 78 78 78 78 78 78 78 78 ...
Truncated

Test 23

Group: 5

Verdict: ACCEPTED

input
100000 99 100000
C 1
C 2
C 3
C 4
...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 24

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 25

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

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

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

Test 26

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
O 473
...

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

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

Test 27

Group: 3, 4, 5

Verdict: ACCEPTED

input
500 2 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...
Truncated

Test 28

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
247 247 247 247 247 247 247 24...
Truncated

Test 29

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

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

user output
250 250 250 250 250 250 250 25...
Truncated

Test 30

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 3 2 3 3 2 2 2 5 4 2 ...

user output
245 245 245 245 245 247 249 24...
Truncated

Test 31

Group: 4, 5

Verdict: ACCEPTED

input
500 250 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
247 247 247 247 247 247 247 24...
Truncated

Test 32

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
497 497 497 497 497 497 497 49...
Truncated

Test 33

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

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

user output
500 500 500 500 500 500 500 50...
Truncated

Test 34

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
O 473
...

correct output
1 1 1 1 2 1 3 3 3 2 2 2 2 4 5 ...

user output
495 495 495 495 495 497 499 49...
Truncated

Test 35

Group: 2, 4, 5

Verdict: ACCEPTED

input
500 500 500
C 384
O 62
C 387
C 473
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
497 497 497 497 497 497 497 49...
Truncated

Test 36

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 37

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

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

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

Test 38

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
O 53318
...

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

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

Test 39

Group: 3, 5

Verdict: ACCEPTED

input
100000 2 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Truncated

Test 40

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
49993 49993 49993 49993 49993 ...
Truncated

Test 41

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

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

user output
49996 49996 49996 49996 49996 ...
Truncated

Test 42

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 3 2 3 3 3 3 3 3 4 5 ...

user output
49983 49983 49983 49983 49983 ...
Truncated

Test 43

Group: 5

Verdict: ACCEPTED

input
100000 50000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
49994 49994 49994 49994 49994 ...
Truncated

Test 44

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
99993 99993 99993 99993 99993 ...
Truncated

Test 45

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

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

user output
99996 99996 99996 99996 99996 ...
Truncated

Test 46

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
O 53318
...

correct output
1 1 1 1 2 1 3 3 3 3 3 3 4 5 3 ...

user output
99983 99983 99983 99983 99983 ...
Truncated

Test 47

Group: 2, 5

Verdict: ACCEPTED

input
100000 100000 100000
C 89384
O 54062
C 85387
C 53318
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
99994 99994 99994 99994 99994 ...
Truncated