제출 #1209538

#제출 시각아이디문제언어결과실행 시간메모리
1209538emptypringlescanShopping (JOI21_shopping)C++17
0 / 100
76 ms16292 KiB
#include "Anna.h" #include <bits/stdc++.h> using namespace std; namespace { int N, L, R; int count; vector<int> recv; int buc=512,sz=1954; int bl,br; } // namespace void InitA(int N, int L, int R) { ::N = N; ::L = L; ::R = R; bl=L/sz,br=R/sz; for(int i=0; i<9; i++) SendA((bl>>i)&1); for(int i=0; i<9; i++) SendA((br>>i)&1); } void ReceiveA(bool x) { if(x) recv.push_back(1); else recv.push_back(0); } int Answer() { int yay=0; for(int i=0; i<20; i++) if(recv[i]) yay^=(1<<i); //cout << "yay " << yay << '\n'; vector<int> lf,rg; for(int i=0; i<sz; i++){ //cout << recv[20+i] << ' '; if(recv[20+i]) lf.push_back(bl*sz+sz-1-i); } //cout << '\n'; for(int i=0; i<sz; i++){ //cout << recv[20+sz+i] << ' '; if(recv[20+sz+i]) rg.push_back(br*sz+i); } //cout << '\n'; int ret=yay; int c1=0,c2=0; for(int i=0; i<(int)lf.size()+(int)rg.size(); i++){ //cout << recv[20+sz+sz+i] << ' '; if(recv[20+sz+sz+i]){ if(lf[c1]>=L&&lf[c1]<=R) ret=lf[c1]; c1++; } else{ if(rg[c2]<=R&&rg[c2]>=L) ret=rg[c2]; c2++; } } //cout << ret << '\n'; return ret; }
#include "Bruno.h" #include <bits/stdc++.h> using namespace std; namespace { int N; int arr[2000000]; int cn; int buc=512,sz=1954; vector<int> recv; } // namespace void InitB(int N, std::vector<int> P) { ::N = N; for(int i = 0; i < N; i++) { arr[i] = P[i]; } for(int i=N; i<2000000; i++) arr[i]=(1<<20)-1; cn = 0; } void ReceiveB(bool y) { cn++; if(y) recv.push_back(1); else recv.push_back(0); if(cn==18){ int bl=0,br=0; for(int i=0; i<9; i++) if(recv[i]) bl^=(1<<i); for(int i=0; i<9; i++) if(recv[i+9]) br^=(1<<i); pair<int,int> mn={(1<<20)-1,-1}; for(int i=bl*sz+sz; i<br*sz; i++) mn=min(mn,{arr[i],i}); int c1=bl*sz+sz-1,c2=br*sz; for(int i=0; i<20; i++) SendB((mn.second>>i)&1); int cmn=mn.first; vector<int> lf,rg; for(int i=c1; i>=bl*sz; i--){ if(arr[i]<cmn){ SendB(true); cmn=arr[i]; lf.push_back(i); } else SendB(false); } cmn=mn.first; for(int i=c2; i<br*sz+sz; i++){ if(arr[i]<cmn){ SendB(true); cmn=arr[i]; rg.push_back(i); } else SendB(false); } c1=0,c2=0; while(c1<(int)lf.size()||c2<(int)rg.size()){ //cout << c1 << ' ' << c2 << '\n'; if(c1==(int)lf.size()) SendB(1),c2++; else if(c2==(int)rg.size()) SendB(0),c1++; else if(arr[lf[c1]]<arr[rg[c2]]) SendB(1),c2++; else SendB(0),c1++; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...