Submission #1286926

#TimeUsernameProblemLanguageResultExecution timeMemory
1286926MMihalev메시지 (IOI24_message)C++20
29.32 / 100
563 ms824 KiB
#include<iostream> #include<vector> #include<algorithm> #include "message.h" using namespace std; void send_message(std::vector<bool> M, std::vector<bool> C) { vector<bool>packet1,packet0; vector<int>free; for(int i=0;i<31;i++) { packet1.push_back(1); packet0.push_back(0); } for(int i=0;i<31;i++) { int bit=C[i]; if(bit==1)send_packet(packet1); else {free.push_back(i);send_packet(packet0);} } int sz=M.size(); vector<bool>packetsz; packetsz.resize(31); for(int i=0;i<16;i++) { int bit=0; if(((1<<i)&(sz))!=0) { bit=1; } packetsz[free[i]]=bit; } send_packet(packetsz); for(int i=0;i<M.size();i+=16) { vector<bool>packet; packet.resize(31); for(int j=i;j<min((int)M.size(),i+16);j++) { packet[free[j-i]]=M[j]; } send_packet(packet); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { vector<bool>ans; vector<int>free; for(int i=0;i<31;i++) { auto packet=R[i]; int cnt0=0,cnt1=0; for(int j=0;j<31;j++) { if(packet[j]==0)cnt0++; else cnt1++; } if(cnt0>cnt1)free.push_back(i); } int sz=0; for(int i=0;i<16;i++) { if(R[31][free[i]])sz+=(1<<i); } for(int i=32;i<R.size();i++) { auto packet=R[i]; for(int j=0;j<16;j++) { if(ans.size()<sz)ans.push_back(packet[free[j]]); } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...