Submission #686162

#TimeUsernameProblemLanguageResultExecution timeMemory
686162jamezzzFlight to the Ford (BOI22_communication)C++17
100 / 100
3382 ms2100 KiB
#include "communication.h" #include <bits/stdc++.h> using namespace std; // // --- Sample implementation for the task communication --- // // To compile this program with the sample grader, place: // communication.h communication_sample.cpp sample_grader.cpp // in a single folder, then open the terminal in this directory (right-click onto an empty spot in the directory, // left click on "Open in terminal") and enter e.g.: // g++ -std=c++17 communication_sample.cpp sample_grader.cpp // in this folder. This will create a file a.out in the current directory which you can execute from the terminal // as ./a.out // See task statement or sample_grader.cpp for the input specification // typedef pair<int,int> ii; typedef vector<ii> vii; #define pf printf #define pb push_back #define sz(x) (int)x.size() int getSize(vii &v){ int sum=0; for(auto[a,b]:v)sum+=b-a+1; return sum; } int inside(vii &v,int X,int up){ int half=(getSize(v)+up)/2; for(int i=0;i<sz(v);++i){ if(half==0)break; auto[l,r]=v[i]; if(r-l+1<=half){ if(l<=X&&X<=r)return 1; half-=r-l+1; } else{ if(l<=X&&X<=l+half-1)return 1; half=0; } } return 0; } void split(vii &v,vii &vi,vii &ve,int up){ int half=(getSize(v)+up)/2; for(int i=0;i<sz(v);++i){ auto[l,r]=v[i]; if(r-l+1<=half)vi.pb({l,r}),half-=r-l+1; else if(half==0)ve.pb({l,r}); else vi.pb({l,l+half-1}),ve.pb({l+half,r}),half=0; } } void encode(int N,int X){ vii corr,wrong; corr.pb({1,N}); int num=0; while(getSize(corr)+getSize(wrong)>3){ //pf("corr: ");for(auto[l,r]:corr)pf("(%d %d) ",l,r);pf("\n"); //pf("wrong: ");for(auto[l,r]:wrong)pf("(%d %d) ",l,r);pf("\n"); int res=send(inside(corr,X,1)||inside(wrong,X,0)); vector<ii> corrI,corrE,wrongI,wrongE; split(corr,corrI,corrE,1); split(wrong,wrongI,wrongE,0); corr.clear(); wrong.clear(); if(res==1){ for(ii x:corrI)corr.pb(x); for(ii x:wrongI)corr.pb(x); for(ii x:corrE)wrong.pb(x); } else{ for(ii x:corrE)corr.pb(x); for(ii x:wrongE)corr.pb(x); for(ii x:corrI)wrong.pb(x); } } vector<int> rem; for(auto [l,r]:corr){ for(int i=l;i<=r;++i)rem.pb(i); } for(auto [l,r]:wrong){ for(int i=l;i<=r;++i)rem.pb(i); } //pf("rem: ");for(int i:rem)pf("%d ",i);pf("\n"); if(X==rem[0])send(0),send(0),send(0),send(0); if(sz(rem)>=2&&X==rem[1])send(0),send(1),send(1),send(0); if(sz(rem)>=3&&X==rem[2])send(1),send(1),send(1),send(1); } ii decode(int N){ vii corr,wrong; corr.pb({1,N}); while(getSize(corr)+getSize(wrong)>3){ //pf("corr: ");for(auto[l,r]:corr)pf("(%d %d) ",l,r);pf("\n"); //pf("wrong: ");for(auto[l,r]:wrong)pf("(%d %d) ",l,r);pf("\n"); int res=receive(); vector<ii> corrI,corrE,wrongI,wrongE; split(corr,corrI,corrE,1); split(wrong,wrongI,wrongE,0); corr.clear(); wrong.clear(); if(res==1){ for(ii x:corrI)corr.pb(x); for(ii x:wrongI)corr.pb(x); for(ii x:corrE)wrong.pb(x); } else{ for(ii x:corrE)corr.pb(x); for(ii x:wrongE)corr.pb(x); for(ii x:corrI)wrong.pb(x); } } vector<int> rem; for(auto [l,r]:corr){ for(int i=l;i<=r;++i)rem.pb(i); } for(auto [l,r]:wrong){ for(int i=l;i<=r;++i)rem.pb(i); } //pf("rem: ");for(int i:rem)pf("%d ",i);pf("\n"); int msk=0; for(int i=0;i<4;++i){ int x=receive(); msk+=x<<i; } vector<int> msks={0,6,15},pos; for(int i=0;i<3;++i){ int diff=msks[i]^msk; if(__builtin_popcount(diff)<2||diff==5||diff==9||diff==10)pos.pb(rem[i]); } pos.pb(1); return {pos[0],pos[1]}; }

Compilation message (stderr)

communication.cpp: In function 'void encode(int, int)':
communication.cpp:59:9: warning: unused variable 'num' [-Wunused-variable]
   59 |     int num=0;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...