#include "message.h"
#include<bits/stdc++.h>
using namespace std;
void send_message(vector<bool>M, vector<bool>C){
vector<vector<bool>>send(66, vector<bool>(31, false));
vector<pair<int, int>>can_use;
for(int i = 0; i < 31; i++){
if(!C[i]){
int cnt = 1;
while(C[(i + cnt) % 31]){
cnt++;
}
send[cnt - 1][i] = true;
for(int j = cnt; j < 66; j++){
can_use.push_back(make_pair(j, i));
}
}
}
for(int i = 0; i < 1025; i++, can_use.pop_back()){
send[can_use.back().first][can_use.back().second] = (i < M.size() ? M[i] : !M.back());
}
for(int i = 0; i < 66; i++){
send_packet(send[i]);
}
}
vector<bool>receive_message(vector<vector<bool>>R){
vector<int>nxt(31, -1), cnt(31);
for(int i = 0; i < 31; i++){
for(int j = 0; j < 66; j++){
if(R[j][i]){
nxt[i] = (i + (cnt[i] = j + 1)) % 31;
break;
}
}
}
vector<pair<int, int>>can_use;
for(int i = 0; i < 31; i++){
vector<bool>vis(31, false);
bool flag = true;
vis[i] = true;
int x = i;
for(int j = 1; j < 16; j++, vis[x] = true){
if((x = nxt[x]) == -1 || vis[x]){
flag = false;
break;
}
}
if(flag && nxt[x] == i){
for(int j = i; j < 31; j++){
if(vis[j]){
for(int k = cnt[j]; k < 66; k++){
can_use.push_back(make_pair(k, j));
}
}
}
break;
}
}
vector<bool>ans(1025);
for(int i = 0; i < 1025; i++, can_use.pop_back()){
ans[i] = R[can_use.back().first][can_use.back().second];
}
bool out = ans.back();
while(ans.back() == out){
ans.pop_back();
}
return ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |