Submission #300622

#TimeUsernameProblemLanguageResultExecution timeMemory
300622fishy15Languages (IOI10_languages)C++17
32 / 100
1166 ms15616 KiB
#include <iostream> #include <iomanip> #include <fstream> #include <vector> #include <array> #include <algorithm> #include <utility> #include <map> #include <queue> #include <set> #include <cmath> #include <cstdio> #include <cstring> #include "lang.h" #include "grader.h" #define ll long long #define ld long double #define eps 1e-8 #define MOD 1000000007 #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f3f // change if necessary #define MAXN 70000 using namespace std; // replace this back when submit const int LEN = 100; const int LANGS = 56; struct val { int tot; int freq[MAXN]; val() { memset(freq, 0, sizeof freq); } ld qry(const map<int, int> &f) { if (tot == 0) return INFLL; ld ans = 0; for (auto p : f) { ld actual_f = 1.0 * freq[p.first] / tot; ld given_f = 1.0 * p.second / LEN; ld val = actual_f == 0 ? -INFLL : log2(fabs(actual_f - given_f) + eps); ans += val * val; } return ans; } void upd(int arr[LEN]) { tot += LEN; for (int i = 0; i < LEN; i++) { freq[arr[i]]++; } } }; val langs[LANGS]; void excerpt(int arr[LEN]) { ld min_val = INFLL; int ans = 0; map<int, int> cnt; for (int i = 0; i < LEN; i++) { cnt[arr[i]]++; } for (int i = 0; i < LANGS; i++) { ld val = langs[i].qry(cnt); if (val < min_val) { min_val = val; ans = i; } } int correct = language(ans); langs[correct].upd(arr); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...