Submission #1246714

#TimeUsernameProblemLanguageResultExecution timeMemory
1246714Saul0906Unscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms584 KiB
#include "messy.h"
#include <bits/stdc++.h>
#include <cstdlib>
#define pii pair<int, int>
#define rep(a,b,c) for(int a=b; a<c; a++)
#define repr(a,b,c) for(int a=b-1; a>c-1; a--)
#define repa(a,b) for(auto a:b)
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define mid ((l+r)>>1)
#define pb push_back

using namespace std;

using vi = vector<int>;

int N, x;
vi p;
string s;
int A=0, B=0;

void add_tree(int l, int r){
	if(l==r) return;
	rep(i,l,r+1) s[i]='0';
	rep(i,l,mid+1){
		s[i]='1';
		A++;
		add_element(s);
		s[i]='0';
	}
	rep(i,l,r+1) s[i]='1';
	add_tree(l,mid);
	add_tree(mid+1,r);
}

void init(){
	s.resize(N);
	rep(i,0,N) s[i]='1';
	s[N-1]='0';
	A++;
	add_element(s);
	add_tree(0,N-2);
	compile_set();
}

int find_n(){
	rep(i,0,N) s[i]='1';
	rep(e,0,N){
		s[e]='0';
		B++;
		if(check_element(s)) return e;
		s[e]='1';
	}
}

void solve(int l, int r){
	if(l==r) return;
	rep(i,l,r+1) s[p[i]]='0';
	vi vl, vr;
	rep(i,l,r){
		s[p[i]]='1';
		B++;
		if(check_element(s)) vl.pb(p[i]);
		else vr.pb(p[i]);
		s[p[i]]='0';
	}
	if(mid-l+1>vl.size()) vl.pb(p[r]);
	else vr.pb(p[r]);
	rep(i,l,r+1) s[p[i]]='1';
	int ind=l;
	repa(e,vl) p[ind++]=e;
	repa(e,vr) p[ind++]=e;
	solve(l,mid);
	solve(mid+1,r);
}

vector<int> restore_permutation(int n, int w, int r) {
	vi ans(n);
	N=n;
	init();
	x = find_n();
	p.clear();
	rep(i,0,n) if(i!=x) p.pb(i);
	solve(0,n-2);
	ans[x]=n-1;
	rep(i,0,n-1) ans[p[i]]=i;
	return ans;
}

Compilation message (stderr)

messy.cpp: In function 'int find_n()':
messy.cpp:55:1: warning: control reaches end of non-void function [-Wreturn-type]
   55 | }
      | ^
messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...