Submission #590854

#TimeUsernameProblemLanguageResultExecution timeMemory
590854tutisFlight to the Ford (BOI22_communication)C++17
15 / 100
41 ms1904 KiB
#include <bits/stdc++.h> using namespace std; int prob = 1; #include "communication.h" void encode(int N, int X) { X--; if (X == 0) { send(0); send(0); send(0); send(0); } if (X == 1) { send(0); send(1); send(1); send(0); } if (X == 2) { send(1); send(0); send(0); send(1); } } pair<int, int> decode(int N) { mt19937_64 rng(1832); int val = 0; for (int t = 0; t < 4; t++) val += receive() << t; vector<int>ans; vector<int>ger; for (int m = 0; m < 16; m++) { bool ok = true; int v = m; while (v != 0) { if (v % 4 == 3) ok = false; v /= 2; } if (ok) ger.push_back(m); } int V[3] = {0, 6, 9}; for (int i = 0; i < 3; i++) { for (int j : ger) if (val == (V[i] ^ j)) ans.push_back(i); } for (int &i : ans) i++; if (ans.size() == 1) return{ans[0], ans[0]}; assert(ans.size() >= 2); return {ans[0], ans[1]}; } // int main() // { // vector<int>ger; // for (int m = 0; m < 16; m++) // { // bool ok = true; // int v = m; // while (v != 0) // { // if (v % 4 == 3) // ok = false; // v /= 2; // } // if (ok) // ger.push_back(m); // } // int a = 0; // { // for (int b = 0; b < 16; b++) // { // for (int c = 0; c < 16; c++) // { // if (a == b || b == c || c == a) // continue; // set<int>A; // set<int>B; // set<int>C; // for (int i : ger) // { // A.insert(i ^ a); // B.insert(i ^ b); // C.insert(i ^ c); // } // bool ok = true; // for (int i : ger) // { // int v1 = i ^ b; // int v2 = i ^ c; // if (A.count(v1) > 0 && A.count(v2) > 0) // { // ok = false; // break; // } // } // for (int i : ger) // { // int v1 = i ^ a; // int v2 = i ^ c; // if (B.count(v1) > 0 && B.count(v2) > 0) // { // ok = false; // break; // } // } // for (int i : ger) // { // int v1 = i ^ a; // int v2 = i ^ b; // if (C.count(v1) > 0 && C.count(v2) > 0) // { // ok = false; // break; // } // } // if (ok) // { // // cout << bitset<4>(a) << endl; // // cout << bitset<4>(b) << endl; // // cout << bitset<4>(c) << endl; // // cout << endl; // } // } // } // } // for (int t = 0; t < 1000; t++) // { // int N = 3; // int val = (t % N) + 1; // encode(N, val); // pair<int, int>v = decode(N); // assert(v.first == val || v.second == val); // cout << v.first << " " << v.second << endl; // } // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...