제출 #1123653

#제출 시각아이디문제언어결과실행 시간메모리
1123653Tob메시지 (IOI24_message)C++20
100 / 100
551 ms848 KiB
#include <bits/stdc++.h> #include "message.h" #define F first #define S second #define all(x) x.begin(), x.end() #define pb push_back #define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; typedef long long ll; typedef pair <ll, ll> pii; void send_message(vector<bool> M, vector<bool> C) { M.pb(1); while (M.size() < 1025) M.pb(0); int cur = 0; vector <int> a, wh(31); for (int i = 0; i < 31; i++) if (!C[i]) { wh[i] = a.size(); a.pb(i); } for (int i = 0; i < 66; i++) { vector <bool> A(31, 0); for (int j = 0; j < 31; j++) { if (C[j]) continue; int x = (a[(wh[j]+1)%16]-j+31)%31; if (i+1 < x) continue; if (i+1 == x) A[j] = 1; if (i+1 > x) A[j] = M[cur++]; } send_packet(A); } } vector<bool> receive_message(vector<vector<bool>> R) { vector <int> a(31), c; for (int i = 0; i < 31; i++) { a[i] = 66; for (int j = 0; j < 66; j++) if (R[j][i]) { a[i] = j+1; break; } } for (int i = 0; i < 31; i++) { int x = i; for (int j = 0; j < 16; j++) { if (a[x] > 16) { x = -1; break; } x = (x+a[x])%31; if (x == i && j < 15) { x = -1; break; } } if (x == i) { for (int j = 0; j < 16; j++) { c.pb(x); x = (x+a[x])%31; } break; } } vector <bool> res; for (int i = 0; i < 66; i++) { for (auto j : c) { if (i+1 <= a[j]) continue; res.pb(R[i][j]); } } while (res.back() == 0) res.pop_back(); res.pop_back(); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...