제출 #1327063

#제출 시각아이디문제언어결과실행 시간메모리
1327063modwweLanguages (IOI10_languages)C++20
99 / 100
1887 ms150012 KiB
#include "grader.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)

const int MAX_LANG = 60;
const int MAX_HASH = 249989;
const int HASH_BASE = 65537;

int freq[MAX_LANG][4][MAX_HASH];
ll scoreLang[MAX_LANG];

int weight[5] = {0, 1, 3, 6, 9};

void excerpt(int *arr)
{
    FOR(i,0,55) scoreLang[i] = 0;
    FOR(start,0,96)
    {
        FOR(len,1,4)
        {
            ll hashVal = 0;
            FOR(pos,start,start+len-1)
            {
                hashVal = (hashVal * HASH_BASE + arr[pos]) % MAX_HASH;
            }

            FOR(lang,0,55)
            {
                scoreLang[lang] += min(len/2, freq[lang][len-1][hashVal]) * weight[len];
            }
        }
    }
    int bestLang = 0;
    FOR(i,0,55)
        if(scoreLang[i] > scoreLang[bestLang])
            bestLang = i;

    int detected = language(bestLang);
    FOR(start,0,96)
    {
        FOR(len,1,4)
        {
            ll hashVal = 0;
            FOR(pos,start,start+len-1)
            {
                hashVal = (hashVal * HASH_BASE + arr[pos]) % MAX_HASH;
            }
            freq[detected][len-1][hashVal]++;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...