Submission #103760

#TimeUsernameProblemLanguageResultExecution timeMemory
103760wxh010910Parrots (IOI11_parrots)C++17
100 / 100
13 ms1792 KiB
#include <bits/stdc++.h> #include "encoder.h" #include "encoderlib.h" using namespace std; void encode(int N, int M[]) { vector<vector<long long>> dp(21, vector<long long>(16)); for (int i = 0; i < 16; ++i) { dp[0][i] = 1; } for (int i = 1; i < 21; ++i) { for (int j = 0; j < 16; ++j) { for (int k = j; k < 16; ++k) { dp[i][j] += dp[i - 1][k]; } } } vector<long long> sum(21); for (int i = 1; i < 21; ++i) { sum[i] = sum[i - 1] + dp[i][0]; } vector<int> a(M, M + N); while (a.size() % 4) { a.push_back(0); ++N; } for (int i = 0; i < N; i += 4) { long long state = 0; for (int j = 0; j < 4; ++j) { state |= (long long) a[i + j] << (j * 8); } int len = 0; while (state >= sum[len]) { ++len; } state -= sum[len - 1]; int last = 0; for (int j = len - 1; ~j; --j) { long long sum = 0; for (int k = last; k < 16; ++k) { if (state < sum + dp[j][k]) { send(i * 4 + k); state -= sum; last = k; break; } sum += dp[j][k]; } } } }
#include <bits/stdc++.h> #include "decoder.h" #include "decoderlib.h" using namespace std; void decode(int N, int L, int X[]) { vector<vector<long long>> dp(21, vector<long long>(16)); for (int i = 0; i < 16; ++i) { dp[0][i] = 1; } for (int i = 1; i < 21; ++i) { for (int j = 0; j < 16; ++j) { for (int k = j; k < 16; ++k) { dp[i][j] += dp[i - 1][k]; } } } vector<long long> sum(21); for (int i = 1; i < 21; ++i) { sum[i] = sum[i - 1] + dp[i][0]; } int n = N; while (N % 4) { ++N; } for (int i = 0; i < N; i += 4) { long long state = 0; vector<int> sorted; for (int j = 0; j < L; ++j) { if (X[j] / 16 == i / 4) { sorted.push_back(X[j] % 16); } } sort(sorted.begin(), sorted.end()); int len = (int) sorted.size(); int last = 0; for (int j = len - 1; ~j; --j) { for (int k = last; k < sorted[len - 1 - j]; ++k) { state += dp[j][k]; } last = sorted[len - 1 - j]; } state += sum[len - 1]; for (int j = 0; j < 4; ++j) { if (i + j < n) { output((state >> (j * 8)) & 255); } } } }
#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...