제출 #1327799

#제출 시각아이디문제언어결과실행 시간메모리
1327799thelegendary08Sphinx's Riddle (IOI24_sphinx)C++17
3 / 100
14 ms408 KiB
#include "sphinx.h"
#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define vi vector<int>
#define pii pair<int,int>
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
#define ask(v) perform_experiment(v)
using namespace std;
std::vector<int> find_colours(int n, std::vector<int> U, std::vector<int> V) {
	vi ans(n, -1); int N = n, idk = 0; 
	if(n%2==1){
		f0r(c,n){vi quer(n,c); quer[n-1] = -1; int ret = ask(quer); if(ret == 1){ans[n-1] = c; break;}} N--, idk = 1; 
	}
	f0r(c,n){
		vi quer(n,c); for(int i = 1; i < N; i+=2)quer[i] = -1; if(n!=N)quer.back() = n; 
		int ret = ask(quer); ret-=idk; ret = N - ret; int cnt = ret/2 + ret%2;
		int pv = N/2-1; while(cnt>0){
			int lo = 0, hi = pv; while(lo < hi){
				int mid = lo + (hi-lo+1) / 2; //check if [mid, N/2-1] got col c
				vi quer(n,n); int bruh = 1; if(mid==0)bruh=0; 
				for(int i = 2*mid; i < N; i++){bruh++; if(i%2==0)quer[i] = c; else quer[i] = -1;}
				int ret = ask(quer); ret -= idk; if(ret==bruh)hi=mid-1; else lo=mid;
			} ans[lo*2+1] = c; pv = lo - 1; cnt--;
		}
		f0r(i,n)quer[i]=c; for(int i = 0; i < N; i+=2)quer[i] = -1; if(n!=N)quer.back() = n; 
		ret = ask(quer); ret -= idk; ret = N - ret; cnt = ret/2 + ret%2;
		pv = 0; while(cnt > 0){
			int lo = pv, hi = N/2-1; while(lo < hi){
				int mid = lo + (hi-lo) / 2;
				vi quer(n,n); int bruh = 1; for(int i = 0; i <= 2*mid+1; i++){bruh++; if(i%2==0)quer[i] = -1; else quer[i]=c;}
				int ret = ask(quer); if(ret==bruh)lo=mid+1; else hi=mid; 
			}
			ans[lo*2] = c; pv = lo + 1; cnt--;
		}
	}
	return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...