Submission #1122871

#TimeUsernameProblemLanguageResultExecution timeMemory
1122871BolatuluFlight to the Ford (BOI22_communication)C++20
0 / 100
267 ms2800 KiB
// Bolatulu #include <bits/stdc++.h> #include "communication.h" /* #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") */ typedef long long ll; typedef unsigned long long ull; typedef double db; #define pb push_back #define eb emplace_back #define ins insert #define F first #define S second #define md (tl+tr)/2 #define TL v+v,tl,md #define TR v+v+1,md+1,tr #define Tl t[v].l,tl,md #define Tr t[v].r,md+1,tr #define all(x) (x).begin(),(x).end() #define yes cout << "YES\n" #define no cout << "NO\n" // #define int long long #define file(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout); #define ld long double using namespace std; int binpow(int a,int n,int M) { if (n==0) return 1; if (n%2!=0) return (a * binpow(a,n-1,M))%M; int z=binpow(a,n/2,M); return (z*z)%M; } const ll INF = 1e18+7; const int N = 1e5+7; const int M = 1e4+7; const ld eps = 1e-3; pair <int,int> calc(int a,int b,int c,int d) { if (b==c) { if (b) return {1,3}; return {2,-1}; } if (a==d) { if (a) return {1,3}; return {1,-1}; } if (a==b) return {3,-1}; return {1,-1}; } void encode(int n,int x) { int m=n; deque <pair <int,int>> v={{1,n}}; while (m>2) { deque <pair <int,int>> v1,v2,v3; int m1=m/3,m2=m/3,m3=m/3; if (m%3>0) m3++; if (m%3>1) m2++; while (!v.empty() and v[0].S-v[0].F+1<=m1) { m1-=v[0].S-v[0].F+1; v1.pb(v[0]); v.pop_front(); } if (m1>0) { int l=v[0].F,r=v[0].S; v1.eb(l,l+m1-1); v.pop_front(); v.push_front({l+m1,r}); m1=0; } while (!v.empty() and v[0].S-v[0].F+1<=m2) { m2-=v[0].S-v[0].F+1; v2.pb(v[0]); v.pop_front(); } if (m2>0) { int l=v[0].F,r=v[0].S; v2.eb(l,l+m2-1); v.pop_front(); v.push_front({l+m2,r}); m2=0; } while (!v.empty() and v[0].S-v[0].F+1<=m3) { m3-=v[0].S-v[0].F+1; v3.pb(v[0]); v.pop_front(); } bool ok1=false,ok2=false; for (auto now : v1) { if (x>=now.F and x<=now.S) ok1=true; } for (auto now : v2) { if (x>=now.F and x<=now.S) ok2=true; } pair <int,int> z=calc(send(ok1),send(ok2),send(ok2),send(ok1)); m1=m/3,m2=m/3,m3=m/3; if (m%3>0) m3++; if (m%3>1) m2++; if (z.F==1) { m-=m1; v1.clear(); } else if (z.F==2) { m-=m2; v2.clear(); } else { m-=m3; v3.clear(); } if (z.S==1) { m-=m1; v1.clear(); } else if (z.S==2) { m-=m2; v2.clear(); } else if (z.S==3) { m-=m3; v3.clear(); } v=v1; v.ins(v.end(),all(v2)); v.ins(v.end(),all(v3)); } } pair <int,int> decode(int n) { int m=n; deque <pair <int,int>> v={{1,n}}; while (m>2) { deque <pair <int,int>> v1,v2,v3; int m1=m/3,m2=m/3,m3=m/3; if (m%3>0) m3++; if (m%3>1) m2++; while (!v.empty() and v[0].S-v[0].F+1<=m1) { m1-=v[0].S-v[0].F+1; v1.pb(v[0]); v.pop_front(); } if (m1>0) { int l=v[0].F,r=v[0].S; v1.eb(l,l+m1-1); v.pop_front(); v.push_front({l+m1,r}); m1=0; } while (!v.empty() and v[0].S-v[0].F+1<=m2) { m2-=v[0].S-v[0].F+1; v2.pb(v[0]); v.pop_front(); } if (m2>0) { int l=v[0].F,r=v[0].S; v2.eb(l,l+m2-1); v.pop_front(); v.push_front({l+m2,r}); m2=0; } while (!v.empty() and v[0].S-v[0].F+1<=m3) { m3-=v[0].S-v[0].F+1; v3.pb(v[0]); v.pop_front(); } pair <int,int> z=calc(receive(),receive(),receive(),receive()); m1=m/3,m2=m/3,m3=m/3; if (m%3>0) m3++; if (m%3>1) m2++; if (z.F==1) { m-=m1; v1.clear(); } else if (z.F==2) { m-=m2; v2.clear(); } else { m-=m3; v3.clear(); } if (z.S==1) { m-=m1; v1.clear(); } else if (z.S==2) { m-=m2; v2.clear(); } else if (z.S==3) { m-=m3; v3.clear(); } v=v1; v.ins(v.end(),all(v2)); v.ins(v.end(),all(v3)); } return {v[0].F,v[1].F}; } /* signed main() { // file("jenga"); ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); int test = 1; solve(3); // cin >> test; while (test--) { // solve(); if (test) cout << '\n'; } return 0; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...