Submission #1268753

#TimeUsernameProblemLanguageResultExecution timeMemory
1268753vincentbucourt1Message (IOI24_message)C++20
0 / 100
166 ms816 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; void send_message(std::vector<bool> message, std::vector<bool> typeBit) { // cout << "send_message\n"; for (int i = 0; i < 31; i++) typeBit[i] = typeBit[i] ^ 1; int firstOpenBit = 0; for (int iBit = 0; iBit < 31; iBit++) { if (typeBit[iBit]) { firstOpenBit = iBit; break; } } vector<bool> messageZero(31, 0), messageOne(31, 1); for (int i = 0; i < 4; i++) { if ((1 << i)&firstOpenBit) { send_packet(messageOne); } else { send_packet(messageZero); } } int numBitsSent = 0, numMessageSent = 0; for (int iBit = firstOpenBit+1; iBit < 30; iBit++) { vector<bool> packet(31, 0); packet[firstOpenBit] = typeBit[iBit]; for (int i = 0; i < 31; i++) { if (typeBit[i] && i != firstOpenBit && numBitsSent < 10) { packet[i] = (1 << numBitsSent)&((int)message.size() - 1); numBitsSent++; } else if (typeBit[i] && i != firstOpenBit && numMessageSent < (int)message.size()) { packet[i] = message[numMessageSent]; numMessageSent++; } } send_packet(packet); } while (numMessageSent < (int)message.size()) { vector<bool> packet(31, 0); for (int i = 0; i < 31; i++) { if (typeBit[i] && numMessageSent < (int)message.size()) { packet[i] = message[numMessageSent]; numMessageSent++; } } send_packet(packet); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> receive) { // cout << "receive_message\n"; // cout << "size: " << (int)receive.size() << "\n"; int firstOpenBit = 0; for (int i = 0; i < 4; i++) { int num1 = 0; for (int j = 0; j < 31; j++) { if (receive[i][j]) num1++; } if (num1 >= 16) firstOpenBit += (1 << i); } // cerr << "firstOpenBit: " << firstOpenBit << "\n"; vector<bool> typeBit(31, 0); typeBit[firstOpenBit] = true; int num1 = 0; for (int i = 4; i < 34 - firstOpenBit - 1; i++) { if (receive[i][firstOpenBit]) { typeBit[i - 4 + firstOpenBit + 1] = true; num1++; } } if (num1 < 16) typeBit[30] = true; // cout << "typeBits: "; // for (int i = 0; i < 31; i++) cout << (typeBit[i]^1) << " "; // cout << "\n"; int lenMessage = 0; int numOpenSeen = 0; for (int i = 0; i < 31; i++) { if (i != firstOpenBit && typeBit[i] && numOpenSeen < 10) { lenMessage += (1 << numOpenSeen) * receive[4][i]; numOpenSeen++; } } lenMessage++; // cout << "lenMessage: " << lenMessage << "\n"; vector<bool> message; numOpenSeen = 0; for (int i = 0; i < 31; i++) { if (typeBit[i]) { if (numOpenSeen > 10) { message.push_back(receive[4][i]); } numOpenSeen++; } } for (int i = 5; i < (int)receive.size(); i++) { for (int j = 0; j < 31; j++) { if (typeBit[j] && (i >= 33 - firstOpenBit || j != firstOpenBit)) { message.push_back(receive[i][j]); } } } // cout << "message: "; // for (int i = 0; i < (int)message.size(); i++) cerr << message[i] << " "; // cout << "\n"; message.resize(lenMessage); return message; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...