Submission #813112

#TimeUsernameProblemLanguageResultExecution timeMemory
813112Theo830Flight to the Ford (BOI22_communication)C++17
0 / 100
400 ms200 KiB
#include"communication.h" #include <bits/stdc++.h> using namespace std; const int bits = 30; vector<vector<pair<int,int> > >adj; vector<int>arr; void encode(int n, int x){ vector<int>arr; set<int>pos; for(int j = 0;j < bits;j++){ pos.insert(j); if(x & (1<<j)){ arr.push_back(1); } else{ arr.push_back(0); } } while(pos.size() > 1){ auto it = pos.begin(); auto it2 = pos.begin(); it2++; int i = (*it),j = (*it2); int a = send(arr[i]); int b = send(arr[j]); int c = send(arr[j]); int d = send(arr[i]); if(b == c){ pos.erase(j); } else{ pos.erase(i); } } } void dfs(int idx,int cur){ arr[idx] = cur; for(auto x:adj[idx]){ dfs(x.first,cur ^ x.second); } } pair<int, int> decode(int n){ int A = 0,B = 0; adj.assign(bits+5,vector<pair<int,int> >()); set<int>pos; for(int j = 0;j < bits;j++){ pos.insert(j); } arr.assign(bits,-1); while(pos.size() > 1){ auto it = pos.begin(); auto it2 = pos.begin(); it2++; int i = (*it),j = (*it2); int a = receive(); int b = receive(); int c = receive(); int d = receive(); if(b == c){ arr[j] = b; pos.erase(j); } else if(a == d){ arr[i] = a; pos.erase(i); } else{ adj[j].push_back({i,a ^ c}); pos.erase(i); } } auto it = pos.begin(); int i = (*it); dfs(i,0); for(int j = 0;j < bits;j++){ assert(arr[j] != -1); if(arr[j]){ A += (1<<j); } } dfs(i,1); for(int j = 0;j < bits;j++){ if(arr[j]){ B += (1<<j); } } A = max(1,A); B = max(1,B); B = min(n,B); A = min(n,A); return {A,B}; }

Compilation message (stderr)

communication.cpp: In function 'void encode(int, int)':
communication.cpp:24:13: warning: unused variable 'a' [-Wunused-variable]
   24 |         int a = send(arr[i]);
      |             ^
communication.cpp:27:13: warning: unused variable 'd' [-Wunused-variable]
   27 |         int d = send(arr[i]);
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...