제출 #1166925

#제출 시각아이디문제언어결과실행 시간메모리
1166925garyye메시지 (IOI24_message)C++20
66.72 / 100
418 ms868 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; int bset(int x, int i) { return ((x >> i) & 1); } const int POS = 5; void send_message(std::vector<bool> M, std::vector<bool> C) { vector<int> bad, good; for(int i = 0; i < C.size(); i++) { if(!C[i]) { good.push_back(i); } } vector<vector<bool>> header(POS, vector<bool>(31, false)); for(int i = 0; i < good.size(); i++) { int cur = good[i]; int nxt = (i + 1 == good.size() ? 0 : good[i + 1]); for(int j = 0; j < POS; j++) { header[j][cur] = bset(nxt, j); } } for(int i = 0; i < POS; i++) send_packet(header[i]); for(int i = 0; i < POS; i++) send_packet(vector<bool>(31, bset(good[0], i))); // Message length vector<bool> msg(31, false); for(int i = 0; i < good.size(); i++) { msg[good[i]] = bset(M.size(), i); } send_packet(msg); // Message itself for(int i = 0; i < M.size();) { for(int j = 0; j < good.size() && i < M.size(); i++, j++) { msg[good[j]] = M[i]; } send_packet(msg); } } template<class T> void debug_vec(vector<T>& t) { // printf("DEBUG "); for(int x: t) printf("%d ", x); puts(""); } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int first = 0; for(int i = POS; i < 2*POS; i++) if(count(begin(R[i]), end(R[i]), true) >= 16) first |= 1 << (i - POS); vector<int> good; good.push_back(first); for(int i = 1; i < 16; i++) { int next = 0; for(int j = 0; j < POS; j++) { if(R[j][good[i-1]]) { next |= (1 << j); } } good.push_back(next); } debug_vec(good); // Receive message length const int MESSAGE_LEN_POS = POS + POS; const int MESSAGE_POS = MESSAGE_LEN_POS + 1; int len = 0; for(int i = 0; i < good.size(); i++) { if(R[MESSAGE_LEN_POS][good[i]]) { len |= (1 << i); } } // printf("len=%d\n", len); // Receive message vector<bool> message(len, false); for(int i = MESSAGE_POS, j = 0; i < R.size(); i++) { for(int k = 0; k < good.size() && j < len; k++, j++) { message[j] = R[i][good[k]]; } } return message; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...