Submission #1217469

#TimeUsernameProblemLanguageResultExecution timeMemory
1217469dostsMessage (IOI24_message)C++20
0 / 100
156 ms844 KiB
#include "message.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") //#define int long long #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() #define big(x) ((int)(x.size())) using namespace std; void send_message(std::vector<bool> M, std::vector<bool> C) { std::vector<bool> A(31, 0); vi clean; int cleany = 0,pis = 0; for (int i = 0;i<31;i++) { for (int j = 0;j<31;j++) A[j] = C[i]; if (!C[i]) clean.push_back(i),cleany+=(i<18); else pis+=(i<18); if (i < 18) send_packet(A); if (pis == 15) break; } if (cleany > 3) { int nxt = 18; //tüm shitler bulunmadıysa for (int j = 0;nxt<31;j++) { A.assign(31,0); for (int i = 0;i<4 && nxt < 31;i++) { A[clean[i]] = C[nxt++]; } send_packet(A); } } int S = big(M); vector<bool> szpack(31,0); for (int i = 0;i<11;i++) { szpack[clean[i]] = !!(S&(1<<i)); } send_packet(szpack); int j = 0; for (int i = 0;i<(S+15)/16;i++) { int ptr = 0; for(int t = 0;t<16;t++) { A[clean[ptr++]] = M[j++]; } send_packet(A); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int rsz = R.size(); /* for (int i = 0;i<rsz;i++) { for (int j = 0;j<31;j++) cerr << R[i][j]; cerr << '\n'; } */ vi clean; int pis = 0; for (int i = 0;i<18;i++) { int z = 0,o = 0; for (auto it : R[i]) { if (it) o++; else z++; } if (z > o) clean.push_back(i); else pis++; if (pis == 15) break; } int curr = 18; if (big(clean) > 3) { int nxt = 18; for (int j = 0;nxt<31;j++) { for (int k = 0;k<4 && nxt < 31;k++) { if (!R[curr][clean[k]]) clean.push_back(nxt); nxt++; } curr++; } } else for (int j = 18;j<31;j++) clean.push_back(j); int s = 0; for (int i = 0;i<11;i++) { if (R[curr][clean[i]]) s+=(1<<i); } curr++; //cerr << s sp curr << endl; vector<bool> M(s); int j = 0; for (int i = 0;i<(s+15)/16;i++) { int ptr = 0; for (int t = 0;t<16;t++) { M[j++] = R[curr][clean[ptr++]]; } curr++; } return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...