Submission #1303294

#TimeUsernameProblemLanguageResultExecution timeMemory
1303294ansonkhcLanguages (IOI10_languages)C++20
99 / 100
2972 ms18192 KiB
#include <bits/stdc++.h> #include "grader.h" #include "lang.h" #define SZ 100 #define PI 3.141592653 using namespace std; int currLang = 0; struct library { unordered_map<unsigned long long int, int> trigramCount, prefBigramCount; bool learnt; inline library() { learnt = 0; } inline int compareLang(int *excerpt) { if(learnt) { double ret = 0.000000; for(int i = 0; i < 100; i++) { pair<int, int> ex = make_pair(i < 2 ? 0 : excerpt[i - 2], i < 1 ? 0 : excerpt[i - 1]); unsigned long long int index = ex.first * 10000000000 + ex.second * 100000 + excerpt[i]; unsigned long long int prefIndex = ex.first * 100000 + ex.second; if(trigramCount.find(index) != trigramCount.end()) { double prob = (double)trigramCount[index] / (double)prefBigramCount[prefIndex]; ret += abs(79.000000 * log10(sin(PI*prob/2.000000))); } else ret += 100.000000; } return ret; } else return 999999.000000; } inline void learnLang(int *excerpt) { learnt = 1; for(int i = 0; i < 100; i++) { pair<int, int> ex = make_pair(i < 2 ? 0 : excerpt[i - 2], i < 1 ? 0 : excerpt[i - 1]); unsigned long long int index = ex.first * 10000000000 + ex.second * 100000 + excerpt[i]; unsigned long long int prefIndex = ex.first * 100000 + ex.second; if(!trigramCount.count(index)) { if(!prefBigramCount.count(prefIndex)) { prefBigramCount[prefIndex] = 1; } else prefBigramCount[prefIndex]++; trigramCount[index] = 1; } else { prefBigramCount[prefIndex]++; trigramCount[index]++; } } } } database[56]; void excerpt(int *E) { int response, answer; double minCheckScore = 999999.000000; double checkScore[56]; for(int j = 0; j < 56; j++) { checkScore[j] = database[j].compareLang(E); if(checkScore[j] < minCheckScore) { minCheckScore = checkScore[j]; response = j; } } if(minCheckScore >= 9250.000000 && currLang < 56) response = currLang; answer = language(response); if(answer == currLang) currLang += (currLang < 56) ? 1 : 0; database[answer].learnLang(E); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...