Submission #49352

# Submission time Handle Problem Language Result Execution time Memory
49352 2018-05-27T02:34:53 Z Diuven Unscrambling a Messy Bug (IOI16_messy) C++11
100 / 100
4 ms 512 KB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;

const int MX=130;

typedef vector<int> vi;

int n;

void tog(int x, char *s){
	s[x]='1'-s[x]+'0';
}

void put(char *s){
	add_element(s);
//	cout<<"PUT: "<<s<<'\n';
}

bool check(char *s){
	bool now=check_element(s);
//	cout<<"CHECK: "<<s<<": "<<now<<'\n';
	return now;
}

void init(int s, int e){
	if(s==e) return;
	char X[MX]; X[n]=0;
	int m=(s+e)/2;
	for(int i=0; i<n; i++)
		X[i]=(s<=i && i<=e) ? '0' : '1';
	for(int i=s; i<=m; i++){
		tog(i, X);
		put(X);
		tog(i, X);
	}
	init(s,m);
	init(m+1,e);
}

vi ans;

void solve(int s, int e){
	if(s==e) return;
	char X[MX]; X[n]=0;

	for(int i=0; i<n; i++)
		X[ans[i]]=(s<=i && i<=e) ? '0' : '1';

	bool infront[MX];
	for(int i=s; i<=e; i++){
		int x=ans[i];
		tog(x, X);
		infront[x]=check(X);
		tog(x, X);
	}

	int pos=s;
	for(int i=s; i<=e; i++){
		if(infront[ans[i]]){
			int t=ans[i];
			ans[i]=ans[pos];
			ans[pos]=t;
			pos++;
		}
	}

	solve(s, (s+e)/2);
	solve((s+e)/2+1, e);
}

vi restore_permutation(int nn, int w, int r) {
	n=nn;
	init(0, n-1);
    compile_set();

	for(int i=0; i<n; i++)
		ans.push_back(i);
    solve(0, n-1);

    vi ret(n);
    for(int i=0; i<n; i++)
    	ret[ans[i]]=i;

    return ret;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 8
2 Correct 2 ms 384 KB n = 8
3 Correct 2 ms 384 KB n = 8
4 Correct 2 ms 428 KB n = 8
5 Correct 2 ms 384 KB n = 8
6 Correct 2 ms 256 KB n = 8
7 Correct 2 ms 384 KB n = 8
8 Correct 2 ms 384 KB n = 8
9 Correct 2 ms 256 KB n = 8
10 Correct 2 ms 256 KB n = 8
11 Correct 2 ms 256 KB n = 8
12 Correct 2 ms 256 KB n = 8
13 Correct 2 ms 256 KB n = 8
14 Correct 2 ms 256 KB n = 8
15 Correct 2 ms 256 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 3 ms 256 KB n = 32
2 Correct 2 ms 256 KB n = 32
3 Correct 2 ms 256 KB n = 32
4 Correct 3 ms 384 KB n = 32
5 Correct 2 ms 384 KB n = 32
6 Correct 2 ms 384 KB n = 32
7 Correct 2 ms 384 KB n = 32
8 Correct 2 ms 384 KB n = 32
9 Correct 2 ms 384 KB n = 32
10 Correct 2 ms 384 KB n = 32
11 Correct 2 ms 384 KB n = 32
12 Correct 2 ms 384 KB n = 32
13 Correct 2 ms 384 KB n = 32
14 Correct 2 ms 384 KB n = 32
15 Correct 2 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 32
2 Correct 2 ms 384 KB n = 32
3 Correct 2 ms 256 KB n = 32
4 Correct 2 ms 384 KB n = 32
5 Correct 2 ms 384 KB n = 32
6 Correct 2 ms 384 KB n = 32
7 Correct 2 ms 384 KB n = 32
8 Correct 2 ms 384 KB n = 32
9 Correct 2 ms 384 KB n = 32
10 Correct 2 ms 384 KB n = 32
11 Correct 2 ms 384 KB n = 32
12 Correct 2 ms 384 KB n = 32
13 Correct 2 ms 384 KB n = 32
14 Correct 2 ms 384 KB n = 32
15 Correct 2 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB n = 128
2 Correct 3 ms 512 KB n = 128
3 Correct 3 ms 512 KB n = 128
4 Correct 3 ms 512 KB n = 128
5 Correct 3 ms 512 KB n = 128
6 Correct 3 ms 512 KB n = 128
7 Correct 4 ms 512 KB n = 128
8 Correct 3 ms 512 KB n = 128
9 Correct 3 ms 512 KB n = 128
10 Correct 3 ms 512 KB n = 128
11 Correct 3 ms 484 KB n = 128
12 Correct 3 ms 512 KB n = 128
13 Correct 4 ms 512 KB n = 128
14 Correct 3 ms 512 KB n = 128
15 Correct 3 ms 512 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 3 ms 512 KB n = 128
2 Correct 3 ms 512 KB n = 128
3 Correct 3 ms 512 KB n = 128
4 Correct 3 ms 512 KB n = 128
5 Correct 3 ms 512 KB n = 128
6 Correct 3 ms 512 KB n = 128
7 Correct 3 ms 512 KB n = 128
8 Correct 3 ms 512 KB n = 128
9 Correct 3 ms 512 KB n = 128
10 Correct 3 ms 512 KB n = 128
11 Correct 3 ms 512 KB n = 128
12 Correct 3 ms 512 KB n = 128
13 Correct 3 ms 512 KB n = 128
14 Correct 3 ms 512 KB n = 128
15 Correct 3 ms 512 KB n = 128