제출 #1221960

#제출 시각아이디문제언어결과실행 시간메모리
1221960Dan4Life메시지 (IOI24_message)C++20
53.89 / 100
429 ms868 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ll = long long; using ar2 = array<int,2>; using ar3 = array<int,3>; using vi = vector<int>; using vll = vector<ll>; using vb = vector<bool>; const int mxN = (int)1e5+10; const int INF = (int)1e9+10; const ll LINF = (ll)1e18+10; int n, USED; vb packet; vi C; void send(int x){ while(1){ while(sz(packet)<31){ int cur = sz(packet); if(C[cur]) packet.pb(0); else if(C[cur]==0){ packet.pb(x); return; } } send_packet(packet); packet.clear(); USED++; } } void send_message(vb M, vb c) { C.clear(); C.resize(31,1); packet.clear(); USED = 0; int bad = 0, good = 0, i = 0; while(i<31 and bad<15 and !good){ vb xd(31,c[i]); send_packet(xd); C[i] = c[i]; good+=!C[i], bad+=C[i], i++; USED++; } while(i<31 and bad<15 and good<16){ send(c[i]); C[i] = c[i]; good+=!C[i], bad+=C[i], i++; } for(int k = i; k < 31; k++) C[k]=(bad==15?0:1); n = sz(M); if(n==1024) n=0; for(int i = 0; i < 10; i++) send(n>>i&1); for(auto u : M) send(u); if(sz(packet)){ while(sz(packet)<31) packet.pb(0); send_packet(packet); packet.clear(); } } vb receive_message(vector<vb> R) { vb ans; ans.clear(); vi C; C.clear(); C.resize(31,1); int bad = 0, good = 0, i=0,j=0,cur_C; while(i<sz(R) and bad<15 and !good){ int num = accumulate(all(R[i]),0); bool bit = num>=16; if(bit) bad++; else good++; C[i] = bit; i++; } if(bad==15){ for(int k = 15; k < 31; k++) C[k] = 0; } else{ cur_C=i; j = 0; while(bad<15 and good<16){ if(!C[j]){ C[cur_C++]=R[i][j]; if(R[i][j]) bad++; else good++; } j++; if(j==31) i++,j=0; } for(int k = cur_C; k < 31; k++) C[k] = (bad==15?0:1); } int bits = 0, n = 0; while(i<sz(R)){ if(!C[j]){ if(bits<10) n|=R[i][j]*(1<<bits),bits++; else{ if(n==0) n=1024; if(sz(ans)==n) return ans; ans.pb(R[i][j]); } } j++; if(j==31) i++,j=0; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...