Submission #1190342

#TimeUsernameProblemLanguageResultExecution timeMemory
1190342NotLinuxMessage (IOI24_message)C++20
49.61 / 100
439 ms884 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l , int r){ return rng() % (r-l+1) + l; } long long decipher = 0; long long cur = 120397273ll; long long sabit = 893721095ll; const long long mod = 1e9 + 7; void init(){ decipher = 0; cur = 120397273ll; sabit = 893721095ll; } int nxt(){ cur = (cur * decipher + sabit) % mod; decipher = (decipher * sabit) % mod; sabit = (sabit + decipher) % mod; return cur & 1; } void send_message(vector<bool> M, vector<bool> C) { init(); // decipheri belirle vector<bool>vec(31,0); for(int i = 0;i<31;i++)vec[i] = rand(0,1); vector<bool>v1 = send_packet(vec); decipher = 0; for(int i = 0;i<31;i++){ if(v1[i]){ decipher += 1ll << i; } } // kleopatralari bul int kleosayac = 0 , patladi[31] = {0}; while(kleosayac < 15){ vec.assign(31,0); int yolla[31]; for(int j = 0;j<31;j++){ yolla[j] = nxt(); if(C[j] == 0){ vec[j] = yolla[j]; } else{ vec[j] = rand(0,1); } } vector<bool>dondu = send_packet(vec); for(int j = 0;j<31;j++){ if(C[j] == 1 and patladi[j] == 0 and dondu[j] != yolla[j]){ kleosayac++; patladi[j] = 1; } } } vec.assign(31,0); M.push_back(1); // mesaji yolla int sayac = 0; for(int i = 0;i<(int)M.size();i++){ while(C[sayac]){ sayac = (sayac + 1) % 31; if(sayac == 0){ send_packet(vec); vec.assign(31,0); } } vec[sayac] = M[i]; sayac = (sayac + 1) % 31; if(sayac == 0){ send_packet(vec); vec.assign(31,0); } } if(sayac != 0){ send_packet(vec); vec.assign(31,0); } } vector<bool> receive_message(vector<vector<bool>> R) { init(); // decipheri bul for(int i = 0;i<31;i++){ if(R[0][i]){ decipher += 1ll << i; } } // kleopatralari bul vector<bool>cleo(31,0); int mindx = 1; while(count(cleo.begin() , cleo.end() ,1) < 15){ for(int j = 0;j<31;j++){ if(R[mindx][j] != nxt()){ cleo[j] = 1; } } mindx++; } // mesaji bul int sayac = 0; vector<bool>ret; while(mindx < R.size()){ while(cleo[sayac]){ sayac = (sayac + 1) % 31; if(sayac == 0)mindx++; if(mindx == R.size())break; } if(mindx == R.size())break; ret.push_back(R[mindx][sayac]); sayac = (sayac + 1) % 31; if(sayac == 0)mindx++; } while(!ret.empty() and ret.back() == 0)ret.pop_back(); ret.pop_back(); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...