QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#561996 | #9237. Message | Zanite# | 39.115 | 267ms | 4140kb | C++20 | 5.4kb | 2024-09-13 14:06:32 | 2024-09-13 14:06:33 |
Judging History
answer
#include "message.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define All(x) x.begin(), x.end()
#define debug(x) cout << #x << " = " << x << "\n"
template<typename T> bool chmax(T &u, T v) { if (u < v) { u = v; return true; } return false; }
template<typename T>
ostream& operator<<(ostream& os, const vector<T> &v) {
os << "["; bool _first = true;
for (auto i : v) { if (!_first) { os << ", "; } os << i; _first = false; }
return os << "]";
}
const ll INF = 1'000'000'000'000'000'000;
const int PKT_SIZE = 31;
const int FREE_IDX = 16;
const int CLEO_IDX = 15;
const int M_SZ_BITS = 10;
const int F_ID_BITS = 5;
void send_message(vector<bool> M, vector<bool> C) {
int S = M.size();
vector<int> free_indices;
for (int i = 0; i < PKT_SIZE; i++) if (!C[i]) free_indices.push_back(i);
vector<int> f_id_transmit;
for (auto f : free_indices) {
for (int i = 0; i < F_ID_BITS; i++) {
f_id_transmit.push_back((f >> i) & 1);
}
}
// Transmit free indices
int transmitted_free = 0;
int ptr = 0;
while (ptr < (int)f_id_transmit.size()) {
vector<bool> cur(PKT_SIZE);
if (FREE_IDX - transmitted_free > CLEO_IDX) {
// transmit through unknown bits
for (int i = transmitted_free; i < FREE_IDX; i++) {
// cerr << f_id_transmit[ptr];
cur[free_indices[i]] = f_id_transmit[ptr];
}
ptr++;
}
// transmit through known bits
for (int i = 0; i < transmitted_free; i++) {
if (ptr < (int)f_id_transmit.size()) {
// cerr << f_id_transmit[ptr];
cur[free_indices[i]] = f_id_transmit[ptr++];
}
}
// cerr << "\n";
send_packet(cur);
transmitted_free = ptr / 5;
}
vector<bool> T;
for (int i = 0; i < M_SZ_BITS; i++) T.push_back((S-1) & (1 << i));
for (auto i : M) T.push_back(i);
ptr = 0;
while (ptr < (int)T.size()) {
vector<bool> cur(PKT_SIZE);
for (auto idx : free_indices) if (ptr < (int)T.size()) {
cur[idx] = T[ptr++];
}
send_packet(cur);
}
}
vector<bool> receive_message(vector<vector<bool>> R) {
int read_packets = 0;
vector<int> free_indices;
vector<bool> is_free(PKT_SIZE);
queue<bool> pending;
while ((int)free_indices.size() < FREE_IDX) {
// cerr << free_indices << "\n";
vector<bool> cur_packet = R[read_packets++];
if (FREE_IDX - (int)free_indices.size() > CLEO_IDX) {
// read unknown bits
int cnt[2] = {};
for (int j = 0; j < PKT_SIZE; j++) if (!is_free[j]) {
cnt[cur_packet[j]]++;
}
pending.push((cnt[0] > cnt[1]) ? 0 : 1);
}
// read known bits
for (auto f : free_indices) pending.push(cur_packet[f]);
while (pending.size() >= 5 && (int)free_indices.size() < FREE_IDX) {
int c = 0;
for (int i = 0; i < 5; i++) {
c |= (pending.front() << i);
pending.pop();
}
free_indices.push_back(c);
is_free[c] = true;
}
}
vector<bool> transmitted;
while (read_packets < (int)R.size()) {
vector<bool> cur_packet = R[read_packets++];
for (auto j : free_indices) transmitted.push_back(cur_packet[j]);
}
int sz = 0;
for (int i = 0; i < M_SZ_BITS; i++) if (transmitted[i]) {
sz |= (1 << i);
}
sz++;
vector<bool> ans;
for (int i = M_SZ_BITS; i < M_SZ_BITS + sz; i++) ans.push_back(transmitted[i]);
return ans;
}
#ifdef Zanite
namespace {
const int PACKET_SIZE = 31;
const int CALLS_CNT_LIMIT = 100;
int calls_cnt;
vector<bool> C(PACKET_SIZE);
vector<vector<bool>> R;
void quit(const char* message) {
printf("%s\n", message);
exit(0);
}
void run_scenario() {
R.clear();
calls_cnt = 0;
int S;
assert(1 == scanf("%d", &S));
vector<bool> M(S);
for (int i = 0; i < S; i++) {
int bit;
assert(1 == scanf("%d", &bit));
assert((bit == 0) || (bit == 1));
M[i] = bit;
}
for (int i = 0; i < PACKET_SIZE; i++) {
int bit;
assert(1 == scanf("%d", &bit));
assert((bit == 0) || (bit == 1));
C[i] = bit;
}
send_message(M, C);
vector<bool> D = receive_message(R);
int K = (int)R.size();
int L = (int)D.size();
printf("%d %d\n", K, L);
for (int i = 0; i < L; i++)
printf("%s%d", (i == 0 ? "" : " "), (D[i] ? 1 : 0));
printf("\n");
}
vector<bool> taint(const vector<bool>& A) {
vector<bool> B = A;
bool bit = 0;
for (int i = 0; i < PACKET_SIZE; i++)
if (C[i] == 1) {
B[i] = bit;
bit = !bit;
}
return B;
}
} // namespace
vector<bool> send_packet(vector<bool> A) {
calls_cnt++;
if (calls_cnt > CALLS_CNT_LIMIT)
quit("Too many calls");
if ((int)A.size() != PACKET_SIZE)
quit("Invalid argument");
vector<bool> B = taint(A);
R.push_back(B);
return B;
}
int main() {
int T;
assert(1 == scanf("%d", &T));
for (int i = 1; i <= T; i++)
run_scenario();
}
#endif
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 64ms
memory: 3848kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #2:
score: 10
Accepted
time: 51ms
memory: 3768kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #3:
score: 10
Accepted
time: 59ms
memory: 4052kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #4:
score: 10
Accepted
time: 107ms
memory: 4124kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #5:
score: 10
Accepted
time: 40ms
memory: 4020kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #6:
score: 10
Accepted
time: 31ms
memory: 3812kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #7:
score: 10
Accepted
time: 21ms
memory: 4016kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Subtask #2:
score: 29.115
Acceptable Answer
Test #8:
score: 29.115
Acceptable Answer
time: 267ms
memory: 4068kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #9:
score: 30.654
Acceptable Answer
time: 123ms
memory: 4036kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3406
result:
points 0.3406
Test #10:
score: 29.115
Acceptable Answer
time: 217ms
memory: 4048kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #11:
score: 29.115
Acceptable Answer
time: 192ms
memory: 4036kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #12:
score: 30.654
Acceptable Answer
time: 207ms
memory: 4136kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3406
result:
points 0.3406
Test #13:
score: 29.115
Acceptable Answer
time: 163ms
memory: 4140kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #14:
score: 29.115
Acceptable Answer
time: 123ms
memory: 4000kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #15:
score: 29.115
Acceptable Answer
time: 149ms
memory: 3832kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235
Test #16:
score: 30.654
Acceptable Answer
time: 146ms
memory: 3848kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3406
result:
points 0.3406
Test #17:
score: 90
Accepted
time: 65ms
memory: 4020kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #18:
score: 90
Accepted
time: 106ms
memory: 4012kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #19:
score: 90
Accepted
time: 81ms
memory: 3796kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #20:
score: 90
Accepted
time: 120ms
memory: 3824kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #21:
score: 90
Accepted
time: 125ms
memory: 4056kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #22:
score: 90
Accepted
time: 134ms
memory: 4016kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
1
result:
points 1.0
Test #23:
score: 81.225
Acceptable Answer
time: 156ms
memory: 4028kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.9025
result:
points 0.9025
Test #24:
score: 59.706
Acceptable Answer
time: 225ms
memory: 4124kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.6634
result:
points 0.6634
Test #25:
score: 43.893
Acceptable Answer
time: 201ms
memory: 4064kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.4877
result:
points 0.4877
Test #26:
score: 30.654
Acceptable Answer
time: 183ms
memory: 3768kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3406
result:
points 0.3406
Test #27:
score: 29.115
Acceptable Answer
time: 204ms
memory: 3836kb
Manager to Aisha
Aisha to Manager
Manager to Basma
Basma to Manager
Manager to Checker
0.3235
result:
points 0.3235