제출 #1205796

#제출 시각아이디문제언어결과실행 시간메모리
1205796Andrey메시지 (IOI24_message)C++20
0 / 100
94 ms840 KiB
#include "message.h" #include<bits/stdc++.h> using namespace std; int calc(vector<bool> c, int p) { if(c[p] == 1) { return INT_MAX; } vector<bool> d(0); for(int i = p; i < 31; i++) { d.push_back(c[i]); } for(int i = 0; i < p; i++) { d.push_back(c[i]); } int br = 0,y = 1; while(y < 31) { br++; int sb = 0; for(int i = 0; i < y; i++) { if(d[i] == 0) { sb++; } } br++; y+=sb; } return br; } void send_message(std::vector<bool> m, std::vector<bool> c) { int sm = INT_MAX,p = -1; for(int i = 0; i < 31; i++) { int x = calc(c,i); if(x < sm) { sm = x; p = i; } } for(int i = 0; i < 5; i++) { vector<bool> wut(31); if((1 << i)&p) { for(int j = 0; j < 31; j++) { wut[j] = 1; } } send_packet(wut); } int y = 1; while(y < 31) { int x = p+y,br = 0; vector<bool> wut(31); for(int i = p; i < p+y; i++) { if(c[i] == 0) { br++; wut[i] = c[x%31]; x++; } } send_packet(wut); y+=br; } for(int i = 0; i < (m.size()+15)/16; i++) { int y = i*16; vector<bool> wut(31); for(int j = 0; j < 31; j++) { if(c[j] == 0 && y < m.size()) { wut[j] = m[y]; y++; } } send_packet(wut); } y = 0; vector<bool> wut(31); for(int i = 0; i < 31; i++) { if(c[i] == 0 && y < 4 && (((1 << y)&((int)m.size())) > 0)) { wut[i] = 1; y++; } else if(c[i] == 0) { y++; } } send_packet(wut); } std::vector<bool> receive_message(std::vector<std::vector<bool>> r) { int p = 0; for(int i = 0; i < 5; i++) { int br = 0; for(int j = 0; j < 31; j++) { if(r[i][j]) { br++; } } if(br >= 16) { p+=(1 << i); } } int y = 1; int x = 5; vector<bool> wow(1,false); while(wow.size() < 31) { y = wow.size(); for(int j = 0; j < y; j++) { if(wow[j] == false) { wow.push_back(r[x][(j+p)%31]); } } x++; } vector<bool> c(31); for(int i = 0; i < 31; i++) { c[i] = wow[(i+p)%31]; } vector<bool> m(0); for(int i = x; i < r.size()-1; i++) { for(int j = 0; j < 31; j++) { if(c[j] == 0) { m.push_back(r[i][j]); } } } int z = 0; y = 0; for(int i = 0; i < 31; i++) { if(c[i] == 0 && y < 4) { if(r[r.size()-1][i]) { z+=(1 << y); } y++; } } while(m.size()%16 != z) { m.pop_back(); } return m; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...