Submission #1190042

#TimeUsernameProblemLanguageResultExecution timeMemory
1190042SalihSahinMessage (IOI24_message)C++20
43.96 / 100
439 ms864 KiB
#include "bits/stdc++.h" #define pb push_back #include "message.h" using namespace std; #define ll long long void send_message(vector<bool> M, vector<bool> C) { int N = M.size(); vector<bool> A(31, 0), B(31, 1); vector<int> cnt(2), zind; int ind = 0; while(ind < 31){ if(cnt[0] == 0){ if(C[ind] == 0) send_packet(A); else send_packet(B); cnt[C[ind]]++; if(C[ind] == 0) zind.pb(ind); ind++; } else{ vector<bool> pac(31, 0); int oldind = ind; for(auto itr: zind){ if(ind > 30) break; pac[itr] = C[ind++]; } for(int j = oldind; j < ind; j++){ if(C[j] == 0) zind.pb(j); } send_packet(pac); } } vector<bool> dis_packet = A; int bt = 1; for(int j = 0; j < 31; j++){ if(C[j] == 0){ if(bt & N) dis_packet[j] = 1; bt *= 2; } } send_packet(dis_packet); for(int i = 0; i < N; i += 16){ vector<bool> packet = A; int ind = 0; for(int j = 0; j < 31; j++){ if(C[j] == 1) continue; if(i + ind < N) packet[j] = M[i + ind]; ind++; } send_packet(packet); } } vector<bool> receive_message(vector<vector<bool>> R){ int n = R.size(); vector<int> C(31); vector<int> cnt(2), zind; int ind = 0, mind = 0; while(ind < 31){ if(cnt[0] == 0){ int sum = 0; for(int j = 0; j < 31; j++){ sum += R[mind][j]; } if(sum >= 16) C[ind] = 1; else C[ind] = 0; cnt[C[ind]]++; if(C[ind] == 0) zind.pb(ind); ind++; mind++; } else{ int oldind = ind; for(int j = 0; j < oldind; j++){ if(C[j] == 0){ if(ind > 30) break; C[ind] = R[mind][j]; ind++; } } for(int j = oldind; j < ind; j++){ if(C[j] == 0) zind.pb(j); } mind++; } } int len = 0, bt = 1; for(int i = mind; i <= mind; i++){ for(int j = 0; j < 31; j++){ if(C[j] == 0){ if(R[i][j] == 1) len += bt; bt *= 2; } } } mind++; vector<bool> message; for(int i = mind; i < n; i++){ for(int j = 0; j < 31; j++){ if(C[j] == 0) message.pb(R[i][j]); } } while(message.size() > len) message.pop_back(); return message; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...