답안 #260213

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
260213 2020-08-09T18:34:36 Z mjkocijan Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
2 ms 640 KB
#include <vector>
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> ii;
#define X first
#define Y second
#define pb push_back

int k[10][200];
vector<int> reza;

std::vector<int> restore_permutation(int n, int w, int r) {
    //add_element("0");
    //compile_set();
    //check_element("0");
    reza.resize(n);
    
    string s(n, '0');
    for (int i = 0; i < n / 2; i++) {
    	s[i] = '1';
    	add_element(s);
    	s[i] = '0';
    }
    for (int m = n / 2; m >= 2; m /= 2) {
    	string t(n, '1');
    	for (int i = 0; i < n; i += m) {
    		for (int j = i; j < i + m; j++) {
    			t[j] = '0';
    		}
    		for (int j = i; j < i + m / 2; j++) {
    			t[j] = '1';
    			add_element(t);
    			t[j] = '0';
    		}
    		for (int j = i; j < i + m; j++) {
    			t[j] = '1';
    		}
    	}
    }
    compile_set();
    int i1 = 0, i2 = n / 2;
    for (int i = 0; i < n; i++) {
    	s[i] = '1';
    	if (!check_element(s)) {
    		k[0][i1] = i;
    		reza[i] |= n / 2;
    		i1++;
    	} else {
    		k[0][i2] = i;
    		i2++;
    	}
    	s[i] = '0';
    }
    
    int kk = 1;
    
    for (int m = n / 2; m >= 2; m /= 2) {
    	string t(n, '1');
    	for (int i = 0; i < n; i += m) {
    		for (int j = i; j < i + m; j++) {
    			t[k[kk - 1][j]] = '0';
    		}
    		i1 = i; i2 = i + m / 2;
    		for (int j = 0; j < n; j++) {
    			if (t[j] == '1') continue;
    			t[j] = '1';
    			if (!check_element(t)) {
    				k[kk][i1] = j;
    				reza[j] |= m / 2;
    				i1++;
    			} else {
    				k[kk][i2] = j;
    				i2++;
    			}
    			t[j] = '0';
    		}
    		for (int j = i; j < i + m; j++) {
    			t[k[kk - 1][j]] = '1';
    		}
    	}
    	kk += 1;
    }
    
    return reza;
    //return std::vector<int>();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 8
2 Correct 1 ms 384 KB n = 8
3 Correct 1 ms 384 KB n = 8
4 Correct 1 ms 512 KB n = 8
5 Correct 1 ms 384 KB n = 8
6 Correct 1 ms 384 KB n = 8
7 Correct 1 ms 384 KB n = 8
8 Correct 1 ms 384 KB n = 8
9 Correct 0 ms 384 KB n = 8
10 Correct 0 ms 384 KB n = 8
11 Correct 0 ms 384 KB n = 8
12 Correct 1 ms 384 KB n = 8
13 Correct 0 ms 384 KB n = 8
14 Correct 1 ms 384 KB n = 8
15 Correct 1 ms 384 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 1 ms 384 KB n = 32
3 Correct 1 ms 384 KB n = 32
4 Correct 1 ms 384 KB n = 32
5 Correct 1 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 384 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 384 KB n = 32
13 Correct 1 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 1 ms 384 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 1 ms 384 KB n = 32
3 Correct 1 ms 384 KB n = 32
4 Correct 1 ms 384 KB n = 32
5 Correct 1 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 384 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 384 KB n = 32
13 Correct 1 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 1 ms 384 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 2 ms 512 KB n = 128
5 Correct 2 ms 512 KB n = 128
6 Correct 2 ms 640 KB n = 128
7 Correct 2 ms 512 KB n = 128
8 Correct 2 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 2 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 2 ms 512 KB n = 128
5 Correct 2 ms 512 KB n = 128
6 Correct 2 ms 512 KB n = 128
7 Correct 2 ms 504 KB n = 128
8 Correct 2 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 2 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128