#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
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]);
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
43 ms |
200 KB |
Security violation! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
400 ms |
200 KB |
Security violation! |
2 |
Halted |
0 ms |
0 KB |
- |