Submission #1136919

#TimeUsernameProblemLanguageResultExecution timeMemory
1136919SkillIssueWAGuyMessage (IOI24_message)C++20
100 / 100
371 ms852 KiB
#include "message.h" #include <bits/stdc++.h> using namespace std; void send_message(std::vector<bool> M, std::vector<bool> C) { vector<vector<bool>> packets(66, vector<bool>(31, false)); vector<int> positions, distance; for (int i = 0; i < 31; i++){ if (!C[i]){ positions.push_back(i); } } for (int i = 1; i < 16; i++){ distance.push_back(positions[i] - positions[i-1]); } distance.push_back(positions[0] + 31 - positions[15]); for (int i = 0; i < 16; i++){ for (int j = 0; j < distance[i]-1; j++){ packets[j][positions[i]] = true; } } M.push_back(1); while (M.size() < 1025){ M.push_back(0); } int pos = 0; for (int i = 0; i < 16; i++){ for (int j = distance[i]; j < 66; j++){ packets[j][positions[i]] = M[pos]; pos++; } } for (int i = 0; i < 66; i++){ send_packet(packets[i]); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { vector<int> connections; vector<int> positions; vector<bool> output; for (int i = 0; i < 31; i++){ connections.push_back(i+1); int p = 0; while (p < 40){ if (R[p][i]){ connections[i]++; p++; } else { break; } } connections[i] %= 31; } vector<int> cache(31, -1); for (int i = 0; i < 31; i++){ int cur = i; bool f = false; for (int j = 0; j < 16; j++){ cur = connections[cur]; if (cur == i){ f = (j == 15); break; } } if (f){ cur = i; for (int j = 0; j < 16; j++){ positions.push_back(cur); cur = connections[cur]; } break; } } for (int i = 0; i < 16; i++){ for (int j = (connections[positions[i]] - positions[i] + 31)%31; j < 66; j++){ output.push_back(R[j][positions[i]]); } } while (!output.back()){ output.pop_back(); } output.pop_back(); return output; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...