제출 #1229230

#제출 시각아이디문제언어결과실행 시간메모리
1229230PVM_pvm스핑크스 (IOI24_sphinx)C++20
3 / 100
2 ms448 KiB
#include "sphinx.h" #include<bits/stdc++.h> using namespace std; #define MAXN 252 int find_ch(int le, int re, int col) { int N=re+1; if (le>re) return -1; if (le==re && le%2==1) return -1; if (le==re) { vector<int> E(N, N); E[le]=-1; E[le-1]=col; int xx=perform_experiment(E); if (N==2) { if (xx==2) return -1; else return le; } else { if (xx==3) return -1; else return le; } } vector<int> E(N); int ochr=re-le+1; if (le!=0) ochr++; for (int q=0;q<le;q++) E[q]=N; for (int q=le;q<=re;q++) { if (q%2==0) E[q]=-1; else E[q]=col; } int xx=perform_experiment(E); if (xx==ochr) return -1; int l=le-1,r=re; while (l<r-1) { int mid=(l+r)/2; ochr=mid-le+1; if (mid==le) { r=mid; continue; } if (mid!=N-1) ochr++; if (le!=0) ochr++; for (int q=0;q<le;q++) E[q]=N; for (int q=le;q<=mid;q++) { if (q%2==0) E[q]=-1; else E[q]=col; } for (int q=mid+1;q<N;q++) { E[q]=N; } xx=perform_experiment(E); if (xx==ochr) l=mid; else r=mid; } return r; } int find_nc(int le, int re, int col) { int N=re+1; if (le>re) return -1; if (le==re && le%2==0) return -1; if (le==re) { vector<int> E(N, N); E[le]=-1; E[le-1]=col; int xx=perform_experiment(E); if (N==2) { if (xx==2) return -1; else return le; } else { if (xx==3) return -1; else return le; } } vector<int> E(N); int ochr=re-le+1; if (le!=0) ochr++; for (int q=0;q<le;q++) E[q]=N; for (int q=le;q<=re;q++) { if (q%2==1) E[q]=-1; else E[q]=col; } int xx=perform_experiment(E); if (xx==ochr) return -1; int l=le-1,r=re; while (l<r-1) { int mid=(l+r)/2; ochr=mid-le+1; if (mid==le) { r=mid; continue; } if (mid!=N-1) ochr++; if (le!=0) ochr++; for (int q=0;q<le;q++) E[q]=N; for (int q=le;q<=mid;q++) { if (q%2==1) E[q]=-1; else E[q]=col; } for (int q=mid+1;q<N;q++) { E[q]=N; } xx=perform_experiment(E); if (xx==ochr) l=mid; else r=mid; } return r; } vector<int> find_colours(int N, vector<int> X, vector<int> Y) { vector<int> G(N, -1); for (int col=0;col<=N-1;col++) { int ll=0; while (true) { int toi=find_ch(ll,N-1,col); if (toi==-1) break; assert(G[toi]==-1); G[toi]=col; ll=toi+2; } ll=1; while (true) { int toi=find_nc(ll,N-1,col); if (toi==-1) break; assert(G[toi]==-1); G[toi]=col; ll=toi+2; } } return G; }
#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...