This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include"communication.h"
#include <bits/stdc++.h>
using namespace std;
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 < 30;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(35,vector<pair<int,int> >());
set<int>pos;
for(int j = 0;j < 30;j++){
pos.insert(j);
}
arr.assign(30,0);
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 < 30;j++){
if(arr[j]){
A += (1<<j);
}
}
dfs(i,1);
for(int j = 0;j < 30;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:23:13: warning: unused variable 'a' [-Wunused-variable]
23 | int a = send(arr[i]);
| ^
communication.cpp:26:13: warning: unused variable 'd' [-Wunused-variable]
26 | int d = send(arr[i]);
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |