Submission #1282824

#TimeUsernameProblemLanguageResultExecution timeMemory
1282824MMihalevSphinx's Riddle (IOI24_sphinx)C++20
36 / 100
31 ms420 KiB
#include<iostream> #include<algorithm> #include<vector> #include<cmath> #include "sphinx.h" using namespace std; vector<int>ans,exp1; int n; bool check(vector<int>ids,int col) { bool full=1; for(int id:ids) { if(ans[id]==-1)full=0; } if(full)return 0; if(ids.size()==1) { for(int i=0;i<n;i++)exp1[i]=col; exp1[ids[0]]=-1; if(perform_experiment(exp1)==1) { return 1; } return 0; } int other; if(col==n-1)other=col-1; else other=col+1; int c1=0,c2=0; for(int i=0;i<ids[0];i++) { c1=1; exp1[i]=n; } for(int i=ids[0];i<=ids.back();i+=2) { if(ans[i]==-1)exp1[i]=-1; else exp1[i]=other; if(i+1<=ids.back())exp1[i+1]=col; } for(int i=ids.back()+1;i<n;i++) { c2=1; exp1[i]=n; } int cnt=perform_experiment(exp1); if(cnt<c1+c2+ids.back()-ids[0]+1)return 1; return 0; } void rec(vector<int>ids,int col) { if(ids.size()==1) { ans[ids[0]]=col; return; } int mid=(ids.size()-1)/2; vector<int>ids1,ids2; for(int i=0;i<ids.size();i++) { if(i<=mid)ids1.push_back(ids[i]); else ids2.push_back(ids[i]); } if(check(ids1,col))rec(ids1,col); else rec(ids2,col); } vector<int> find_colours(int N, std::vector<int> X, std::vector<int> Y) { n=N; exp1.resize(n); ans.resize(n); for(int i=0;i<n;i++) { ans[i]=-1; } vector<int>idseven,idsodd; for(int i=0;i<n;i++) { if(i%2==0)idseven.push_back(i); else idsodd.push_back(i); } for(int col=0;col<n;col++) { while(1) { bool full=1; for(int id:idseven) { if(ans[id]==-1)full=0; } if(full)break; if(check(idseven,col))rec(idseven,col); else break; } while(1) { bool full=1; for(int id:idsodd) { if(ans[id]==-1)full=0; } if(full)break; if(check(idsodd,col))rec(idsodd,col); else break; } } 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...