Submission #291931

#TimeUsernameProblemLanguageResultExecution timeMemory
291931tatyamLanguages (IOI10_languages)C++17
101 / 100
2135 ms140500 KiB
#include "grader.h" #include "lang.h" #include <bits/stdc++.h> using namespace std; using u64 = uint64_t; #define C(n) \ auto comp ## n = [](const array<int, n>& a){ u64 ans = 0; for(int i : a){ ans <<= 16; ans |= i; } return ans; };\ unordered_map<array<int, n>, array<int, 56>, decltype(comp ## n)> c ## n(1 << 17, comp ## n) C(1); C(2); C(3); C(4); array<int, 56> cnt; const double A = 208.171, B = 2401.08, C = 331.18, D = 3741.06; void excerpt(int *E) { cnt.fill(0); for(int i = 0; i <= 100 - 1; i++){ auto& c = c1[{E[i]}]; int s = accumulate(c.begin(), c.end(), 0); if(!s) continue; for(int i = 0; i < 56; i++) cnt[i] += double(c[i]) / s * A; } for(int i = 0; i <= 100 - 2; i++){ auto& c = c2[{E[i], E[i + 1]}]; int s = accumulate(c.begin(), c.end(), 0); if(!s) continue; for(int i = 0; i < 56; i++) cnt[i] += double(c[i]) / s * B; } for(int i = 0; i <= 100 - 3; i++){ auto& c = c3[{E[i], E[i + 1], E[i + 2]}]; int s = accumulate(c.begin(), c.end(), 0); if(!s) continue; for(int i = 0; i < 56; i++) cnt[i] += double(c[i]) / s * C; } for(int i = 0; i <= 100 - 4; i++){ auto& c = c4[{E[i], E[i + 1], E[i + 2], E[i + 3]}]; int s = accumulate(c.begin(), c.end(), 0); if(!s) continue; for(int i = 0; i < 56; i++) cnt[i] += double(c[i]) / s * D; } int ans = language(max_element(cnt.begin(), cnt.end()) - cnt.begin()); for(int i = 0; i <= 100 - 1; i++){ auto& c = c1[{E[i]}]; c[ans]++; } for(int i = 0; i <= 100 - 2; i++){ auto& c = c2[{E[i], E[i + 1]}]; c[ans]++; } for(int i = 0; i <= 100 - 3; i++){ auto& c = c3[{E[i], E[i + 1], E[i + 2]}]; c[ans]++; } for(int i = 0; i <= 100 - 4; i++){ auto& c = c4[{E[i], E[i + 1], E[i + 2], E[i + 3]}]; c[ans]++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...