Submission #235457

#TimeUsernameProblemLanguageResultExecution timeMemory
235457dolphingarlicLanguages (IOI10_languages)C++14
97 / 100
6088 ms95044 KiB
#include <bits/stdc++.h> #pragma GCC optimize("unroll-loops") #pragma GCC optimize("O3") #pragma GCC target("sse4,avx2,fma,avx") #define FOR(i, x, y) for (int i = x; i < y; i++) typedef long long ll; using namespace std; #include "grader.h" #include "lang.h" const int SZ = 100, LANGS = 56; const ll LETTER_WEIGHT = 0, BIGRAM_WEIGHT = 3, TRIGRAM_WEIGHT = 12, QUADRAM_WEIGHT = 60; ll cnt[LANGS], letter[SZ], bigram[SZ], trigram[SZ], quadram[SZ]; unordered_map<ll, unordered_map<int, int>> mp; void excerpt(int *E) { FOR(i, 0, LANGS) cnt[i] = 0; FOR(i, 0, SZ - 3) { quadram[i] = 0; FOR(j, 0, 4) { quadram[i] = (quadram[i] << 16) + E[i + j]; } trigram[i] = quadram[i] >> 16; bigram[i] = trigram[i] >> 16; letter[i] = bigram[i] >> 16; if (mp[quadram[i]].size()) { int best = -1, sim = -1; for (pair<int, int> k : mp[quadram[i]]) { if (k.second > sim) { sim = k.second; best = k.first; } } cnt[best] += QUADRAM_WEIGHT; } if (mp[trigram[i]].size()) { int best = -1, sim = -1; for (pair<int, int> k : mp[trigram[i]]) { if (k.second > sim) { sim = k.second; best = k.first; } } cnt[best] += TRIGRAM_WEIGHT; } if (mp[bigram[i]].size()) { int best = -1, sim = -1; for (pair<int, int> k : mp[bigram[i]]) { if (k.second > sim) { sim = k.second; best = k.first; } } cnt[best] += BIGRAM_WEIGHT; } if (mp[letter[i]].size()) { int best = -1, sim = -1; for (pair<int, int> k : mp[letter[i]]) { if (k.second > sim) { sim = k.second; best = k.first; } } cnt[best] += LETTER_WEIGHT; } } int best = -1, sim = -1; FOR(i, 0, LANGS) { if (cnt[i] > sim) { sim = cnt[i]; best = i; } } int ans = language(best); FOR(i, 0, SZ - 3) { mp[quadram[i]][ans]++; mp[trigram[i]][ans]++; mp[bigram[i]][ans]++; mp[letter[i]][ans]++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...