Submission #1140380

#TimeUsernameProblemLanguageResultExecution timeMemory
1140380x93bd0Parrots (IOI11_parrots)C++20
17 / 100
2 ms840 KiB
#include "encoder.h" #include "encoderlib.h" #include <algorithm> #include <stdio.h> #include <cmath> using namespace std; void encode(int N, int M[]) { uint t[0x80]; for (uint x = 0; x < 0x80; x++) t[x] = 0; uint dis = 0, _dbg_msg_sz = 0; // printf("Input: "); pair<uint, uint> nM[2*N]; uint rems = 0, rem = 0, p = 0; for (uint x = 0; x < N; p++) { uint i; if (rems == 7) { rems = 0; i = rem; rem = 0; } else { // printf("%d ", M[x]); i = ((M[x] << rems) + rem) & 0x7f; rem = M[x++] >> (8 - ++rems); } nM[p].first = i << 1; nM[p].second = p; } // printf("\n"); if (rems) { nM[p].first = rem; nM[p].second = p; p++; } /*printf("Correct: "); for (uint x = 0; x < p; x++) printf("%u ", nM[x].first >> 1); printf("\n");*/ sort(nM, nM + p); for (uint x = 0; x < p; x++) { send(nM[x].first); // printf("%d ", nM[x].second); uint packet = (x << 1) | 1; for (uint i = 0; i <= nM[x].second; i++) send(packet); } // printf("\n"); }
#include "decoder.h" #include "decoderlib.h" #include <algorithm> #include <cstdio> #include <cmath> using namespace std; void _output(int n) { //printf("%u ", n); output(n); } void decode(int N, int L, int X[]) { uint s = (uint)ceil(N * 8 / 7) + 5; uint bytes[s]; uint freq[s]; for (uint x = 0; x < s; x++) freq[x] = 0; uint bs = 0; for (uint x = 0; x < L; x++) { if (X[x] & 1) { freq[X[x] >> 1]++; } else { bytes[bs++] = X[x] >> 1; } } sort(bytes, bytes + bs); /*for (uint x = 0; x < bs; x++) printf("%d ", bytes[x]); printf("\n");*/ uint org_pos[bs]; for (uint x = 0; x < s; x++) { if (!freq[x]) continue; org_pos[freq[x] - 1] = bytes[x]; } /*printf("Guess: "); for (uint x = 0; x < bs; x++) printf("%u ", org_pos[x]); printf("\n");*/ uint c = 0; uint bef = 0, befs = 0; for (uint x = 0; c < N; x++) { if (befs < 2) { bef |= (org_pos[x] << befs) & 0xff; befs += 7; if (befs == 8) { _output(bef); c++; bef = 0, befs = 0; } continue; } _output((bef | (org_pos[x] << befs)) & 0xff); c++; bef = org_pos[x] >> (8 - befs); befs = 7 - (8 - befs); } if (befs && c < N) _output(bef); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...