| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1363788 | solution6312 | Message (IOI24_message) | C++17 | 0 ms | 0 KiB |
#include "message.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
using namespace std;
vector<bool> send_packet(vector<bool> A);
namespace encode
{
int pos[16];
void send_message(vector<bool> M, vector<bool> C)
{
reverse(M.begin(), M.end());
M.push_back(1);
while (M.size()<1025) M.push_back(0);
reverse(M.begin(), M.end());
M.push_back(0);
assert(M.size()==1026);
//for (bool i:M) cerr<<i; cerr<<endl;
int cnt=0;
for (int i=0; i<31; i++)
{
if (!C[i])
{
pos[cnt++]=i;
}
}
assert(cnt==16);
for (int i=0; i<5; i++)
{
vector<bool> packet(31, ((pos[0]>>i)&1));
send_packet(packet);
}
for (int i=5; i<35; i++)
{
vector<bool> packet(31, 0);
int lft=i*15-76;
for (int j=1; j<16; j++) packet[pos[j]]=M[lft+j];
if (i<pos[0]+5) packet[pos[0]]=C[i-5];
else packet[pos[0]]=C[i-4];
send_packet(packet);
}
for (int i=35; i<71; i++)
{
vector<bool> packet(31, 0);
int lft=i*16-110;
for (int j=0; j<16; j++) packet[pos[j]]=M[lft+j];
send_packet(packet);
}
}
}
void send_message(vector<bool> M, vector<bool> C) { encode::send_message(M, C); }