제출 #1330799

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

static constexpr int K = 56;

static map<uint32_t,int> g1[K];
static map<uint64_t,int> g2[K];
static map<uint64_t,int> g3[K];
static map<uint64_t,int> g4[K];

static int examples_seen[K];

static inline uint64_t enc2(uint32_t a, uint32_t b) {
    return ((uint64_t)a << 16) | b;
}

static inline uint64_t enc3(uint32_t a, uint32_t b, uint32_t c) {
    return ((uint64_t)a << 32) | ((uint64_t)b << 16) | c;
}

static inline uint64_t enc4(uint32_t a, uint32_t b, uint32_t c, uint32_t d) {
    return ((uint64_t)a << 48) |
           ((uint64_t)b << 32) |
           ((uint64_t)c << 16) |
            d;
}

void excerpt(int E[100]) {

    set<uint32_t> s1;
    set<uint64_t> s2, s3, s4;

    for(int i = 0; i < 100; i++) {
        s1.insert(E[i]);
        if(i >= 1) s2.insert(enc2(E[i-1], E[i]));
        if(i >= 2) s3.insert(enc3(E[i-2], E[i-1], E[i]));
        if(i >= 3) s4.insert(enc4(E[i-3], E[i-2], E[i-1], E[i]));
    }

    int best_lang = 0;
    double best_score = -1e100;

    for(int L = 0; L < K; L++) {

        if(examples_seen[L] == 0) continue;

        double score = 0;

        for(auto x : s1) {
            auto it = g1[L].find(x);
            if(it != g1[L].end())
                score += 9.0 * log(1.0 + it->second);
        }

        for(auto x : s2) {
            auto it = g2[L].find(x);
            if(it != g2[L].end())
                score += 5.0 * log(1.0 + it->second);
        }

        for(auto x : s3) {
            auto it = g3[L].find(x);
            if(it != g3[L].end())
                score += 1.0 * log(1.0 + it->second);
        }

        for(auto x : s4) {
            auto it = g4[L].find(x);
            if(it != g4[L].end())
                score += 7.0 * log(1.0 + it->second);
        }

        if(score > best_score) {
            best_score = score;
            best_lang = L;
        }
    }

    int correct = language(best_lang);

    examples_seen[correct]++;

    for(auto x : s1) g1[correct][x]++;
    for(auto x : s2) g2[correct][x]++;
    for(auto x : s3) g3[correct][x]++;
    for(auto x : s4) g4[correct][x]++;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...