Submission #1214488

#TimeUsernameProblemLanguageResultExecution timeMemory
1214488hyakupMessage (IOI24_message)C++20
30.33 / 100
526 ms856 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; const int n = 31; const int logm = 11; vector<bool> encode( int x ){ vector<bool> v(logm); for( int i = 0; i < logm; i++ ) if( x&(1<<i) ) v[i] = true; return v; } void send_message( vector<bool> m, vector<bool> c ){ int cont_cleo = 0; for( int i = 0; i < n && cont_cleo < 15 && i - cont_cleo < 16; i++ ){ if( c[i] ) cont_cleo++; vector<bool> v(n, c[i]); send_packet(v); } vector<bool> num = encode(m.size()); vector<bool> qtd(n); for( int i = 0; i < n; i++ ) if( !c[i] && !num.empty() ){ qtd[i] = num.back(); num.pop_back(); } send_packet(qtd); int p = 0; while( p < m.size() ){ vector<bool> v(n); for( int i = 0; i < n; i++ ) if( !c[i] && p < m.size() ) v[i] = m[p++]; send_packet(v); } } vector<bool> receive_message( vector<vector<bool>> mat ){ vector<int> c(n); int cont_cleo = 0; int cur = 0; for( cur = 0; cur < n && cont_cleo < 15 && cur - cont_cleo < 16; cur++ ){ vector<int> cont(2); for( auto x : mat[cur] ) cont[(int)x]++; c[cur] = ((cont[1] > cont[0]) ? true : false ); if( c[cur] ) cont_cleo++; } if( cont_cleo < 15 ) for( int i = cur; i < n; i++ ) c[i] = true; int qtd = 0, cont = 0; for( int i = 0; i < n; i++ ) if( !c[i] && cont < logm ){ cont++; qtd = (qtd<<1) + (int)mat[cur][i]; } vector<bool> resp; while( ++cur < mat.size() ){ for( int i = 0; i < n; i++ ) if( !c[i] && resp.size() < qtd ) resp.push_back(mat[cur][i]); } return resp; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...