#include"communication.h"
#include <bits/stdc++.h>
using namespace std;
const int bits = 30;
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,vector<int>&arr,vector<vector<pair<int,int> > >&adj){
arr[idx] = cur;
for(auto x:adj[idx]){
dfs(x.first,cur ^ x.second,arr,adj);
}
}
pair<int, int> decode(int n){
int A = 0,B = 0;
vector<vector<pair<int,int> > >adj;
vector<int>arr;
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,arr,adj);
for(int j = 0;j < bits;j++){
if(arr[j]){
A += (1<<j);
}
}
dfs(i,1,arr,adj);
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:22:13: warning: unused variable 'a' [-Wunused-variable]
22 | int a = send(arr[i]);
| ^
communication.cpp:25:13: warning: unused variable 'd' [-Wunused-variable]
25 | int d = send(arr[i]);
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
41 ms |
200 KB |
Not correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
302 ms |
200 KB |
Not correct |
2 |
Halted |
0 ms |
0 KB |
- |