Submission #127663

# Submission time Handle Problem Language Result Execution time Memory
127663 2019-07-09T20:54:27 Z Sorting Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
6 ms 632 KB
#include <bits/stdc++.h>

using namespace std;

void add_element(string x);
void compile_set();
bool check_element(string x);

void add(string &s, int l, int r){
	if(l == r){
		return;
	}

	int mid = (l + r) >> 1;

	for(int i = l; i <= mid; i++){
		s[i] = '1';

		add_element(s);

		s[i] = '0';
	}

	for(int i = l; i <= mid; i++){
		s[i] = '1';
	}
	add(s, mid + 1, r);

	for(int i = l; i <= mid; i++){
		s[i] = '0';
	}
	for(int i = mid + 1; i <= r; i++){
		s[i] = '1';
	}
	add(s, l, mid);

	for(int i = mid + 1; i <= r; i++){
		s[i] = '0';
	}
}

vector<int> v1, v2;

void solve(vector<int> &p, string &s, int l, int r){
	if(l == r){
		return;
	}

	int mid = (l + r) >> 1;

	for(int i = l; i <= r; i++){
		s[p[i]] = '1';

		if(check_element(s)){
			v1.push_back(p[i]);
		}
		else{
			v2.push_back(p[i]);
		}

		s[p[i]] = '0';
	}

	//while(v1.size() != mid - l + 1);

	for(int i = l; i <= mid; i++){
		p[i] = v1[i - l];
	}
	for(int i = mid + 1; i <= r; i++){
		p[i] = v2[i - mid - 1];
	}
	v1.clear();
	v2.clear();

	for(int i = mid + 1; i <= r; i++){
		s[p[i]] = '1';
	}
	solve(p, s, l, mid);

	for(int i = mid + 1; i <= r; i++){
		s[p[i]] = '0';
	}
	for(int i = l; i <= mid; i++){
		s[p[i]] = '1';
	}

	solve(p, s, mid + 1, r);
	for(int i = l; i <= mid; i++){
		s[p[i]] = '0';
	}
}

vector<int> restore_permutation(int n, int w, int r){
	string s;
	for(int i = 0; i < n; i++){
		s += '0';
	}

	add(s, 0, n - 1);
	compile_set();

	vector<int> p;

	for(int i = 0; i < n; i++){
		p.push_back(i);
	}

	solve(p, s, 0, n - 1);

	vector<int> ret;

	for(int i = 0; i < n; i++){
		ret.push_back(i);
	}

	for(int i = 0; i < n; i++){
		ret[p[i]] = i;
	}

	return ret;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 8
2 Correct 2 ms 376 KB n = 8
3 Correct 2 ms 256 KB n = 8
4 Correct 2 ms 256 KB n = 8
5 Correct 3 ms 376 KB n = 8
6 Correct 2 ms 256 KB n = 8
7 Correct 2 ms 376 KB n = 8
8 Correct 2 ms 376 KB n = 8
9 Correct 2 ms 376 KB n = 8
10 Correct 2 ms 376 KB n = 8
11 Correct 2 ms 376 KB n = 8
12 Correct 2 ms 376 KB n = 8
13 Correct 2 ms 376 KB n = 8
14 Correct 2 ms 376 KB n = 8
15 Correct 2 ms 380 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 32
2 Correct 2 ms 376 KB n = 32
3 Correct 2 ms 376 KB n = 32
4 Correct 2 ms 368 KB n = 32
5 Correct 2 ms 376 KB n = 32
6 Correct 2 ms 376 KB n = 32
7 Correct 2 ms 376 KB n = 32
8 Correct 2 ms 376 KB n = 32
9 Correct 2 ms 376 KB n = 32
10 Correct 2 ms 376 KB n = 32
11 Correct 2 ms 376 KB n = 32
12 Correct 2 ms 376 KB n = 32
13 Correct 2 ms 376 KB n = 32
14 Correct 2 ms 376 KB n = 32
15 Correct 2 ms 452 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB n = 32
2 Correct 2 ms 376 KB n = 32
3 Correct 2 ms 376 KB n = 32
4 Correct 2 ms 376 KB n = 32
5 Correct 2 ms 376 KB n = 32
6 Correct 2 ms 380 KB n = 32
7 Correct 2 ms 376 KB n = 32
8 Correct 2 ms 380 KB n = 32
9 Correct 2 ms 252 KB n = 32
10 Correct 2 ms 376 KB n = 32
11 Correct 2 ms 376 KB n = 32
12 Correct 2 ms 376 KB n = 32
13 Correct 2 ms 376 KB n = 32
14 Correct 2 ms 376 KB n = 32
15 Correct 2 ms 376 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 3 ms 504 KB n = 128
2 Correct 4 ms 632 KB n = 128
3 Correct 3 ms 504 KB n = 128
4 Correct 3 ms 504 KB n = 128
5 Correct 3 ms 504 KB n = 128
6 Correct 4 ms 504 KB n = 128
7 Correct 3 ms 504 KB n = 128
8 Correct 3 ms 504 KB n = 128
9 Correct 3 ms 504 KB n = 128
10 Correct 3 ms 504 KB n = 128
11 Correct 4 ms 504 KB n = 128
12 Correct 4 ms 504 KB n = 128
13 Correct 3 ms 504 KB n = 128
14 Correct 4 ms 504 KB n = 128
15 Correct 3 ms 504 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 6 ms 504 KB n = 128
2 Correct 4 ms 632 KB n = 128
3 Correct 3 ms 504 KB n = 128
4 Correct 3 ms 504 KB n = 128
5 Correct 3 ms 504 KB n = 128
6 Correct 3 ms 504 KB n = 128
7 Correct 3 ms 504 KB n = 128
8 Correct 3 ms 504 KB n = 128
9 Correct 4 ms 508 KB n = 128
10 Correct 3 ms 504 KB n = 128
11 Correct 3 ms 504 KB n = 128
12 Correct 3 ms 504 KB n = 128
13 Correct 4 ms 504 KB n = 128
14 Correct 4 ms 504 KB n = 128
15 Correct 4 ms 552 KB n = 128