Submission #908659

#TimeUsernameProblemLanguageResultExecution timeMemory
908659GrandTiger1729Flight to the Ford (BOI22_communication)C++17
90 / 100
2125 ms3184 KiB
#include "communication.h" #include <bits/stdc++.h> using namespace std; void encode(int N, int X) { int ans = 0; vector<int> res[2]; int x = 0; res[0].push_back(0); int re[4]{}; bool f = 0; for (int y = 1; y <= 29; y++) { if (1 << y > N) { break; } if (!f) { re[0] = send(X >> x & 1); } re[1] = send(X >> y & 1); re[2] = send(X >> y & 1); if (re[1] == re[2]) { ans ^= re[1] << y; f = 0; continue; } re[3] = send(X >> x & 1); if (re[0] == re[3]) { for (auto &i : res[0]) { ans ^= re[0] << i; } for (auto &i : res[1]) { ans ^= (!re[0]) << i; } res[0] = res[1] = vector<int>(); res[0].push_back(y); x = y; f = 0; } else { res[re[0] ^ re[1] ^ 1].push_back(y); re[0] = re[3]; f = 1; } } } pair<int, int> decode(int N) { int ans = 0; vector<int> res[2]; int x = 0; res[0].push_back(0); int re[4]{}; bool f = 0; for (int y = 1; y <= 29; y++) { if (1 << y > N) { break; } if (!f) { re[0] = receive(); } re[1] = receive(); re[2] = receive(); if (re[1] == re[2]) { ans ^= re[1] << y; f = 0; continue; } re[3] = receive(); if (re[0] == re[3]) { for (auto &i : res[0]) { ans ^= re[0] << i; } for (auto &i : res[1]) { ans ^= (!re[0]) << i; } res[0] = res[1] = vector<int>(); res[0].push_back(y); x = y; f = 0; } else { res[re[0] ^ re[1] ^ 1].push_back(y); re[0] = re[3]; f = 1; } } int ans1 = ans, ans2 = ans; for (auto &i : res[0]) { ans1 ^= 1 << i; } for (auto &i : res[1]) { ans2 ^= 1 << i; } ans1 = clamp(ans1, 1, N); ans2 = clamp(ans2, 1, N); return make_pair(ans1, ans2); }

Compilation message (stderr)

communication.cpp: In function 'std::pair<int, int> decode(int)':
communication.cpp:60:9: warning: variable 'x' set but not used [-Wunused-but-set-variable]
   60 |     int x = 0;
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...