Submission #1269339

#TimeUsernameProblemLanguageResultExecution timeMemory
1269339vincentbucourt1Message (IOI24_message)C++20
100 / 100
406 ms824 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; void send_message(std::vector<bool> message, std::vector<bool> badBit) { message.push_back(1); vector<vector<bool>> send(66, vector<bool>(31)); int finalGoodBit = 0; for (int iBit = 0; iBit < 31; iBit++) { if (!badBit[iBit]) { finalGoodBit = iBit; } } vector<int> lenDown(31, 0); bool firstGoodBit = true; int prevGoodBit = 0; for (int iBit = 0; iBit < 31; iBit++) { if (!badBit[iBit]) { if (firstGoodBit) { lenDown[iBit] = 31 - finalGoodBit + iBit; firstGoodBit = false; } else { lenDown[iBit] = iBit - prevGoodBit; } send[lenDown[iBit] - 1][iBit] = 1; prevGoodBit = iBit; } } int iMessage = 0; for (int iPacket = 0; iPacket < 66; iPacket++) { for (int iBit = 0; iBit < 31; iBit++) { if (!badBit[iBit] && iPacket >= lenDown[iBit] && iMessage < (int)message.size()) { send[iPacket][iBit] = message[iMessage]; iMessage++; } } } for (int iPacket = 0; iPacket < 66; iPacket++) { send_packet(send[iPacket]); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> receive) { vector<int> jumpLen(31, 0); for (int iBit = 0; iBit < 31; iBit++) { int iPacket = 0; while (iPacket < 66 && !receive[iPacket][iBit]) { iPacket++; } jumpLen[iBit] = iPacket+1; } vector<bool> badBit(31, 1); for (int iBit = 0; iBit < 31; iBit++) { vector<bool> visitedBit(31, 0); int numVisitedBits = 0; int currBit = iBit; for (int iLen = 0; iLen < 16; iLen++) { assert(0 <= currBit && currBit < 31); if (!visitedBit[currBit]) { numVisitedBits++; } visitedBit[currBit] = true; currBit = (currBit - jumpLen[currBit] + 31*1000) % 31; } if (numVisitedBits == 16 && currBit == iBit) { currBit = iBit; for (int iLen = 0; iLen < 16; iLen++) { badBit[currBit] = 0; currBit = (currBit - jumpLen[currBit] + 31) % 31; } break; } } int messageLast1 = 0; vector<bool> message; for (int iPacket = 0; iPacket < 66; iPacket++) { for (int iBit = 0; iBit < 31; iBit++) { if (!badBit[iBit] && iPacket >= jumpLen[iBit]) { message.push_back(receive[iPacket][iBit]); if (receive[iPacket][iBit]) { messageLast1 = (int)message.size(); } } } } message.resize(messageLast1 - 1); return message; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...