# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1103078 | aaaaaarroz | Message (IOI24_message) | C++17 | 485 ms | 420 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
vector<bool> send_packet(vector<bool> A);
void send_message(vector<bool> M, vector<bool> C) {
vector<bool> enviar(31);
int pos = 0;
int cnt = 0;
for (int i = 0; i < 25; i++) {
vector<bool> control_packet(31, !C[i]);
send_packet(control_packet);
}
int cantidad = M.size();
int bit = 0;
for (int i = 0; i < 31; i++) {
if (!C[i] && bit < 6) {
enviar[i] = (cantidad >> bit) & 1;
bit++;
} else {
enviar[i] = 0;
}
}
send_packet(enviar);
vector<bool> envio(31);
int msg_pos = 0;
while (msg_pos < M.size()) {
int envio_pos = 0;
for (int i = 0; i < 31; i++) {
if (!C[i] && msg_pos < M.size()) {
envio[i] = M[msg_pos];
msg_pos++;
} else {
envio[i] = 0;
}
}
send_packet(envio);
}
}
vector<bool> receive_message(vector<vector<bool>> R) {
vector<bool> funciona(31, false);
int paquetes = R.size();
for (int i = 0; i < 25; i++) {
int votos = 0;
for (int j = 0; j < 31; j++) {
if (R[i][j]) votos++;
}
if (votos > 15) {
funciona[i] = true;
}
}
int bit_real = 0;
int largo = 0;
for (int i = 0; i < 31; i++) {
if (!funciona[i] && bit_real < 6) {
largo += (R[25][i] << bit_real);
bit_real++;
}
}
vector<bool> sec;
for (int i = 26; i < paquetes; i++) {
for (int j = 0; j < 31; j++) {
if (!funciona[j]) {
sec.push_back(R[i][j]);
}
}
}
while (sec.size() > largo) {
sec.pop_back();
}
return sec;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |