#include "message.h"
#include <bits/stdc++.h>
using namespace std;
void send_message(std::vector<bool> message, std::vector<bool> mask) {
int x;
vector<bool> allzero(31, 0),allone(31,1);
for(int i = 0;i<31;i++) if(mask[i]==0){
x=i;
break;
}
for(int i = 0;i<5;i++) {
if((1<<i)&x) send_packet(allone);
else send_packet(allzero);
}
reverse(message.begin(),message.end());
message.push_back(1);
while(message.size() < 1025) message.push_back(0);
reverse(message.begin(),message.end());
int idx = 0, info = 0;
vector<bool> cur;
// for(auto e : message) cout << e << " ";
while(idx < message.size()) {
int cand = cur.size();
if(cand == x && info < 31) {
cur.push_back(mask[info++]);
} else if (mask[cand]) {
cur.push_back(0);
} else {
cur.push_back(message[idx++]);
}
if(cur.size() == 31) {
send_packet(cur);
cur.clear();
}
}
if(cur.size()){
while(cur.size() < 31) cur.push_back(0);
send_packet(cur);
}
}
bool vote(vector<bool> v) {
int a=0,b=0;
for(int i = 0;i<v.size();i++) {
v[i] ? a++ : b++;
}
if(a > b) return 1;
else return 0;
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> res) {
int x = 0;
for(int i = 0;i<5;i++) if(vote(res[i]))x |= (1<<i);
vector<bool>mask(31,0);
vector<bool>ans;
for(int i = 5;i<5+31;i++) {
mask[i-5]=res[i][x];
}
for(int i = 5;i<res.size();i++) {
for(int j = 0;j<31;j++) if(!mask[j] && !(i < 5 + 31 && j == x)){
ans.push_back(res[i][j]);
}
}
while(ans.size() > 1025)ans.pop_back();
reverse(ans.begin(),ans.end());
while(ans.back() == 0)ans.pop_back();
ans.pop_back();
reverse(ans.begin(),ans.end());
return ans;
}
/*
1
5
1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |