Submission #903594

#TimeUsernameProblemLanguageResultExecution timeMemory
903594phoebeParrots (IOI11_parrots)C++17
100 / 100
7 ms1572 KiB
#include <bits/stdc++.h> #include "encoder.h" #include "encoderlib.h" using namespace std; #define ll unsigned long long static const int maxx = 31; static ll idx, dp[40][32] = {0}; static ll _pow(ll n, ll e){ ll re = 1ll; while (e){ if (e&1) re *= n; n *= n; e /= 2; } return re; } ll raw_to_hash(vector<int> &v){ ll re = 0; for (int i = 0; i < v.size(); i++){ int rem_length = v.size() - i - 1; ll bruh = v[i] * _pow(256, rem_length); re += bruh; } return re; } void dp_encode(){ for (int x = 0; x < 32; x++) dp[0][x] = 1; for (int i = 1; i < 40; i++){ for (int x = 0; x < 32; x++){ ll re = 0; for (int y = x; y <= maxx; y++) re += dp[i - 1][y]; dp[i][x] = re; } } } void bruh_encode(int i, ll rem, int last){ while (i){ for (int y = last; y <= maxx; y++){ ll cnt = dp[i - 1][y]; if (rem >= cnt) rem -= cnt; else{ send(idx + y); last = y; i--; break; } } } } void encode(int N, int M[]){ dp_encode(); int angie = 0; for (int i = 0; i < N; i += 8){ idx = angie<<5; angie++; vector<int> v; for (int j = i; j < min(N, i + 8); j++){ v.push_back(M[j]); } ll hash = raw_to_hash(v); // actually_encode(min((int)v.size() * 5, (int)38), hash, 0); bruh_encode(min((int)v.size() * 5, (int)38), hash, 0); } }
#include <bits/stdc++.h> #include "decoder.h" #include "decoderlib.h" using namespace std; #define ll unsigned long long static const int maxx = 31; static ll dp[40][32] = {0}; static ll _pow(ll n, ll e){ ll re = 1ll; while (e){ if (e&1) re *= n; n *= n; e /= 2; } return re; } ll cnt_decode(int i, int x){ if (dp[i][x] != -1) return dp[i][x]; if (i == 0) return 1ll; ll re = 0; for (int y = x; y <= maxx; y++) re += dp[i - 1][y]; dp[i][x] = re; return re; } void dp_decode(){ for (int x = 0; x < 32; x++) dp[0][x] = 1; for (int i = 1; i < 40; i++){ for (int x = 0; x < 32; x++){ ll re = 0; for (int y = x; y <= maxx; y++) re += dp[i - 1][y]; dp[i][x] = re; } } } void actually_decode(int i, ll rem){ ll angie = 0, og_rem = rem; for (int j = 0; j < i; j++){ int rem_length = i - j - 1; ll bruh = _pow(256, rem_length); ll y = rem / bruh; output(y); rem %= bruh; angie += y * bruh; } } void decode(int N, int L, int X[]){ dp_decode(); sort(X, X + L); for (int i = 0; i < L; i += 38){ vector<int> v; for (int j = i; j < min(L, i + 38); j++){ v.push_back(X[j] % 32); } ll hash = 0; ll angie = 0; for (int j = 0; j < v.size(); j++){ int sz = v.size() - j - 1; for (int x = (j == 0 ? 0 : v[j - 1]); x < v[j]; x++){ hash += dp[sz][x]; } } actually_decode((v.size() + 4) / 5, hash); } }

Compilation message (stderr)

encoder.cpp: In function 'long long unsigned int raw_to_hash(std::vector<int>&)':
encoder.cpp:23:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for (int i = 0; i < v.size(); i++){
      |                     ~~^~~~~~~~~~

decoder.cpp: In function 'long long unsigned int cnt_decode(int, int)':
decoder.cpp:22:18: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'int' [-Wsign-compare]
   22 |     if (dp[i][x] != -1) return dp[i][x];
      |         ~~~~~~~~~^~~~~
decoder.cpp: In function 'void actually_decode(int, long long unsigned int)':
decoder.cpp:42:19: warning: unused variable 'og_rem' [-Wunused-variable]
   42 |     ll angie = 0, og_rem = rem;
      |                   ^~~~~~
decoder.cpp: In function 'void decode(int, int, int*)':
decoder.cpp:63:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for (int j = 0; j < v.size(); j++){
      |                         ~~^~~~~~~~~~
decoder.cpp:62:12: warning: unused variable 'angie' [-Wunused-variable]
   62 |         ll angie = 0;
      |            ^~~~~
#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...