제출 #1313626

#제출 시각아이디문제언어결과실행 시간메모리
13136261ota메시지 (IOI24_message)C++20
0 / 100
343 ms732 KiB
#include <bits/stdc++.h> #include "message.h" using namespace std; // #define int long long #define entire(x) (x).begin(), (x).end() // vector<vector<bool>> hint; // void send_packet (vector<bool> a) { // hint.push_back(a); // } void send_message(vector<bool> m, vector<bool> c){ reverse(entire(m)); m.push_back(true); while ((int) m.size() < 1025) m.push_back(false); for (int i = 0; i < 31; i++) c[i] = !c[i]; reverse(entire(m)); int fg = 0; for (; c[fg] == false; fg++); int idx = 0; for (int bit = 0; bit < 31; bit++){ if (bit == fg) continue; vector<bool> cur(31, false); cur[fg] = c[bit]; for (int i = fg + 1; i < 31; i++) if (c[i]) cur[i] = m[idx++]; send_packet(cur); } while (idx < 1025){ vector<bool> cur(31, false); for (int i = fg; i < 31 and idx < 1025; i++) if (c[i]) cur[i] = m[idx++]; send_packet(cur); } int len = 0; // 1 + 2 + 4 + 8 + 16 = 31 !! // 0 -> 1 -> 2 -> 3 -> 4 for (; (1 << len) < fg; len++) fg -= (1 << len); for (int i = len-1; i > -1; i--){ vector<bool> cur(31, false); if ((1 << i) & fg) fill(entire(cur), true); send_packet(cur); } } vector<bool> receive_message (vector<vector<bool>> r){ // len would always be 66 or more int nr = (int) r.size(), len = nr - 66; int fg = (1 << len) - 1; for (int i = nr - 1; i > nr - 1 - len; i--){ int cnt1 = count(entire(r[i]), true); if (cnt1 >= 16) fg += (1 << (nr - 1 - i)); } vector<int> idx{fg}; vector<bool> c(1025, false); c[fg] = true; for (int bit = 0; bit < 31; bit++){ if (bit == fg) continue; c[bit] = r[bit - (bit > fg)][fg]; if (c[bit]) idx.push_back(bit); } vector<bool> ans; for (int i = 0; i < 30; i++){ for (int bit : idx) if (bit != fg){ ans.push_back(r[i][bit]); } } for (int i = 30; i < 66; i++){ for (int bit : idx) ans.push_back(r[i][bit]); } ans.pop_back(); int fon = 0; for (; ans[fon] == false; fon++); vector<bool> actual; for (int i = fon + 1; i < (int) ans.size(); i++) actual.push_back(ans[i]); return actual; } // int32_t main(){ // string cleo, message; cin >> cleo >> message; // int n = (int) message.size(); // vector<bool> c(31), m(n); // for (int i = 0; i < 31; i++) c[i] = cleo[i] == '1'; // for (int i = 0; i < n; i++) m[i] = message[i] == '1'; // cout << "Cleo Hoe : "; // for (auto bit : c) cout << bit << " "; // cout << endl << "Message : "; // for (auto bit : m) cout << bit << " "; // cout << endl << "[END]" << endl; // send_message(m, c); // cout << endl; // vector<bool> found = receive_message(hint); // for (auto bit : found) cout << bit << " "; // cout << endl; // return 0; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...