Submission #1217707

#TimeUsernameProblemLanguageResultExecution timeMemory
1217707dostsMessage (IOI24_message)C++20
79.64 / 100
415 ms908 KiB
#include "message.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") //#define int long long #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() #define big(x) ((int)(x.size())) using namespace std; void send_message(std::vector<bool> M, std::vector<bool> C) { std::vector<bool> A(31, 0); vi clean; for (int i = 0;i<31;i++) if (!C[i]) clean.push_back(i); int fbit = clean[0]; for (int i = 0;i<4;i++) send_packet(vector<bool>(31,!!(fbit&(1<<i)))); int ptr = 0; int nxt = 0; for (int i = 0;i<30;i++) { if (nxt == fbit) nxt++; vector<bool> A(31,0); for (int j = 1;j<16;j++) A[clean[j]] = M[ptr++]; A[fbit] = C[nxt++]; send_packet(A); } int S = big(M); vector<bool> szpack(31,0); for (int i = 0;i<16;i++) szpack[clean[i]] = !!(S&(1<<i)); send_packet(szpack); for (int i = 0;ptr < S;i++) { vector<bool> A(31,0); for (auto it : clean) { if (ptr == S) break; A[it] = M[ptr++]; } send_packet(A); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int fbit = 0; int cur = 0; for (int i = 0;i<4;i++) { int o = 0,z = 0; for (auto it : R[cur]) { if (it) o++; else z++; } if (o > z) fbit+=1<<i; cur++; } int nxt = 0; vi clean{fbit}; for (int i = 0;i<30;i++) { if (nxt == fbit) nxt++; if (!R[cur+i][fbit]) clean.push_back(nxt); nxt++; } int s = 0; for (int i = 0;i<big(clean);i++) { if (R[cur+30][clean[i]]) s+=(1<<i); } vector<bool> msg(s); int ptr = 0; for (int i = 0;ptr < s && i< 30;i++) { for (auto it : clean) { if (it == fbit) continue; if (ptr == s) break; msg[ptr++] = R[cur+i][it]; } } cur+=31; for (int i = 0;ptr < s;i++) { for (auto it : clean) { if (ptr == s) break; msg[ptr++] = R[cur][it]; } cur++; } return msg; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...