Submission #672075

#TimeUsernameProblemLanguageResultExecution timeMemory
672075alvingogoFlight to the Ford (BOI22_communication)C++17
15 / 100
7998 ms21780 KiB
#include <bits/stdc++.h> #include "communication.h" using namespace std; typedef long long ll; vector<ll> use(vector<ll> a,vector<ll> b,ll x,ll t){ sort(a.begin(),a.end()); sort(b.begin(),b.end()); ll as=a.size(); ll bs=b.size(); vector<ll> la,ra,lb,rb; if(as+bs<=2){ vector<ll> z; for(auto h:a){ z.push_back(h); } for(auto h:b){ z.push_back(h); } assert(z.size()); if(z.size()==1){ z.push_back(z[0]); } return z; } else if(as+bs==3){ vector<ll> g; for(auto h:a){ g.push_back(h); } for(auto h:b){ g.push_back(h); } sort(g.begin(),g.end()); ll u=-1; for(ll i=0;i<3;i++){ if(g[i]==x){ u=i; } } if(t==0){ return g; } else{ string s[3]={"1111","0001","1000"}; if(u==-1){ string z; for(ll j=0;j<4;j++){ z+=char('0'+receive()); } ll flag=-1; for(ll i=0;i<3;i++){ ll lst=0; for(ll j=0;j<4;j++){ if(s[i][j]!=z[j]){ if(lst){ flag=i; break; } else{ lst=1; } } else{ lst=0; } } } assert(flag>=0); vector<ll> ret; for(ll i=0;i<3;i++){ if(i!=flag){ ret.push_back(g[i]); } } return ret; } else{ for(ll i=0;i<4;i++){ send(ll(s[u][i]-'0')); } return vector<ll>(); } } } ll nxt=-1; for(ll i=0;i<as/2;i++){ if(a[i]==x){ nxt=0; } la.push_back(a[i]); rb.push_back(a[i]); } for(ll i=as/2;i<as;i++){ if(a[i]==x){ nxt=1; } ra.push_back(a[i]); lb.push_back(a[i]); } for(ll i=0;i<(bs+1)/2;i++){ if(b[i]==x){ nxt=0; } la.push_back(b[i]); } for(ll i=(bs+1)/2;i<bs;i++){ if(b[i]==x){ nxt=1; } ra.push_back(b[i]); } ll dd; if(nxt==-1){ dd=receive(); } else{ dd=send(nxt); } if(dd==0){ return use(la,lb,x,t); } else{ return use(ra,rb,x,t); } } const ll Bd=31647; void encode(int N,int X){ ll a=X/Bd; ll c=X%Bd; vector<ll> v(max(3ll,N/Bd+2)); iota(v.begin(),v.end(),0); auto e=use(v,vector<ll>(),a,0); vector<ll> w(Bd); iota(w.begin(),w.end(),0); auto f=use(w,vector<ll>(),c,0); assert(e.size()==3 && f.size()==3); vector<ll> z; for(auto h:e){ for(auto y:f){ if(h*Bd+y<=0 || h*Bd+y>N){ continue; } z.push_back(h*Bd+y); } } use(z,vector<ll>(),X,1); } pair<int,int> decode(int N){ vector<ll> v(max(3ll,N/Bd+2)); iota(v.begin(),v.end(),0); auto e=use(v,vector<ll>(),-1,0); vector<ll> w(Bd); iota(w.begin(),w.end(),0); auto f=use(w,vector<ll>(),-1,0); assert(e.size()==3 && f.size()==3); vector<ll> z; for(auto h:e){ for(auto y:f){ if(h*Bd+y<=0 || h*Bd+y>N){ continue; } z.push_back(h*Bd+y); } } auto j=use(z,vector<ll>(),-1,1); return {j[0],j[1]}; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...