Submission #1227411

#TimeUsernameProblemLanguageResultExecution timeMemory
1227411PVM_pvmMessage (IOI24_message)C++20
49.61 / 100
416 ms876 KiB
#include "message.h" #include<bits/stdc++.h> using namespace std; long long tqh[35]= {1247409604,1041284415,368450250,759565667,688983579,163713745,878269828,1800699521,23182890,601149433,703873808,1548830370,894144778,1358735275,44310481,1094541754,1676837940,1848239302,1511851508,606643000,1302241754,1676046649,1239123916,991006200,1119130579,1302034927,275419670,1588229067,1559215688,1237265176,742427275,1896172886,1516355067,1733916436,2129019759}; void send_message(vector<bool> M, vector<bool> C) { srand(160); vector<bool> razkrit(31); for (int q=0;q<31;q++) razkrit[q]=!C[q]; int klk=16; int prv; int vtr; for (int w=0;w<35;w++) { vector<bool> msg(31); int tt=rand()%2; vtr=w; for (int q=0;q<31;q++) { if (C[q]) { if (w==prv) msg[q]=(tqh[w]>>q)%2; else if (w==vtr) msg[q]=1-(tqh[w]>>q)%2; else msg[q]=rand()%2; } else { int klk=(tqh[w]>>q)%2; msg[q]=klk; } } vector<bool> rsp=send_packet(msg); for (int q=0;q<31;q++) { if (rsp[q]!=((tqh[w]>>q)%2)) { if (razkrit[q]) continue; razkrit[q]=1; klk++; } } if (klk==31) { //cerr<<w<<" s\n"; break; } } int len=M.size(); int br=0; vector<bool> dylz(31); for (int q=0;q<31;q++) { if (C[q]) dylz[q]=0; else { dylz[q]=len%2; len/=2; } } send_packet(dylz); len=M.size(); for (int cur=0;cur<len;) { vector<bool> syob(31); for (int q=0;q<31;q++) { if (C[q]) syob[q]=0; else { if (cur==len) syob[q]=0; else { syob[q]=M[cur]; cur++; } } } send_packet(syob); } } vector<bool> receive_message(vector<vector<bool>> R) { vector<bool> otg; vector<bool> razkrit(31); int klk=0; int sl; for (int w=0;w<35;w++) { for (int q=0;q<31;q++) { if (R[w][q]!=((tqh[w]>>q)%2)) { if (razkrit[q]) continue; razkrit[q]=1; klk++; } } if (klk==15) { sl=w+1; //cerr<<w<<" r\n"; break; } } int dlz=0; int br=0; for (int q=0;q<31;q++) { if (razkrit[q]) continue; dlz+=R[sl][q]*(1<<br); br++; } //cout<<dlz<<" e dylg\n"; int cur=0; for (int w=sl+1;w<R.size();w++) { for (int q=0;q<31;q++) { if (razkrit[q]) continue; if (cur==dlz) continue; otg.push_back(R[w][q]); cur++; } } return otg; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...