Submission #477041

#TimeUsernameProblemLanguageResultExecution timeMemory
477041Genius3435Languages (IOI10_languages)C++17
0 / 100
10090 ms121332 KiB
//! This is exactly dolphingarlic's submission here: https://oj.uz/submission/238716 //! With the `hyperb` function replaced with $\log(1+\log(1+x))$, //! which looks similar enough that I wanted to try it. #include <bits/stdc++.h> #define FOR(i, x, y) for (int i = x; i < y; i++) typedef long long ll; #include "grader.h" const int SZ = 100, LANGS = 56, MOD = 539653; ll si[SZ], bi[SZ], tr[SZ], qu[SZ]; double cnt[LANGS]; int freq[LANGS][MOD]; inline double fn(int x) { return log1p(log1p(x)); } void excerpt(int *E) { FOR(i, 0, SZ - 3) { si[i] = E[i]; bi[i] = ((si[i] << 16) + E[i + 1]) % MOD; tr[i] = ((bi[i] << 16) + E[i + 2]) % MOD; qu[i] = ((tr[i] << 16) + E[i + 3]) % MOD; } int best = 0; double best_sim = 0; FOR(i, 0, LANGS) { double sim = 0; FOR(j, 0, SZ - 3) { sim += fn(freq[i][qu[j]]) * 9; sim += fn(freq[i][tr[j]]) * 1; sim += fn(freq[i][bi[j]]) * 7; sim += fn(freq[i][si[j]]) * 1; } sim /= log(cnt[i] + 2); if (sim > best_sim) best = i, best_sim = sim; } int ans = language(best); cnt[ans]++; FOR(i, 0, SZ - 3) { freq[ans][qu[i]]++; freq[ans][tr[i]]++; freq[ans][bi[i]]++; freq[ans][si[i]]++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...