제출 #1150331

#제출 시각아이디문제언어결과실행 시간메모리
1150331ThylOneMinerals (JOI19_minerals)C++20
6 / 100
1 ms420 KiB
#include "minerals.h" #include <algorithm> #include <bits/stdc++.h> #include <cstdlib> using namespace std; void dbg(string tag, vector<int> v){ cerr<<tag<< " "; for(int a:v)cerr<<a<<' '; cerr<<endl; } bool box[1000]; int Query_(int x){ box[x] = !box[x]; return Query(x); } void recurse(vector<int> in_box, vector<int> out_box, bool side = false){ if(in_box.size()==1 && out_box.size()==1){ Answer(in_box.back(),out_box.back()); }else{ vector<int> inl,inr,outl,outr; int mid = in_box.size()/2; for(int i = 0 ; i < mid; i++)inl.push_back(in_box[i]); for(int i = mid ; i < in_box.size(); i++)inr.push_back(in_box[i]); int base = 0; for(int i = (side?0:mid) ; i < (side?mid:in_box.size());i++){ base = Query_(in_box[i]); } for(int i = 0 ; i < out_box.size() ; i++){ //Si tout est déja complet on économise BEAUCOUP if(outr.size()==inr.size()){ outl.push_back(out_box[i]); }else if(outl.size()==inl.size()){ outr.push_back(out_box[i]); }else{ int x = Query_(out_box[i]); if(x != base){ outr.push_back(out_box[i]); }else{ outl.push_back(out_box[i]); } base = x; } } recurse(inl,outl,0); recurse(inr,outr,1); } } void Solve(int N) { srand(time(NULL)); vector<int> A,B; int base = 0; for(int i = 1 ; i < 2*N ; i++){ int x = Query_(i); if(x==(base+1)){A.push_back(i);base++;} else{Query_(i);B.push_back(i);} } if(A.size()==N)B.push_back(2*N); else A.push_back(2*N); recurse(A,B); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...