Submission #412760

#TimeUsernameProblemLanguageResultExecution timeMemory
412760KoDLast supper (IOI12_supper)C++17
25 / 100
587 ms21928 KiB
#include <bits/stdc++.h>
#include "advisor.h"

template <class T>
using Vec = std::vector<T>;

void write(const int width, const int bit) {
    for (int i = 0; i < width; ++i) {
        WriteAdvice(bit >> i & 1);
    }
}

void ComputeAdvice(int *C, int N, int K, int M) {
    Vec<Vec<int>> idx(N);
    for (int i = 0; i < N; ++i) {
        idx[i].push_back(N);
    }
    for (int i = N - 1; i >= 0; --i) {
        idx[C[i]].push_back(i);
    }
    std::map<int, int> map;
    std::set<std::pair<int, int>> que;
    for (int i = 0; i < K; ++i) {
        map[i] = i;
        que.emplace(idx[i].back(), i);
    }
    for (int i = 0; i < N; ++i) {
        if (que.find(std::make_pair(idx[C[i]].back(), C[i])) == que.end()) {
            const auto [t, j] = *que.rbegin();
            que.erase(std::make_pair(t, j));
            write(N <= 5000 ? 13 : 15, map[j]);
            map[C[i]] = map[j];
        } 
        else {
            write(N <= 5000 ? 13 : 15, K);
            que.erase(std::make_pair(idx[C[i]].back(), C[i]));
        }
        idx[C[i]].pop_back();
        que.emplace(idx[C[i]].back(), C[i]);
    }
}
#include <bits/stdc++.h>
#include "assistant.h"

template <class T>
using Vec = std::vector<T>;

int read(unsigned char *A, const int width) {
    static int idx = 0;
    int bit = 0;
    for (int i = 0; i < width; ++i) {
        if (A[idx++]) {
            bit += 1 << i;
        }
    }
    return bit;
}

void Assist(unsigned char *A, int N, int K, int R) {
    std::map<int, int> map;
    Vec<int> cur(K);
    for (int i = 0; i < K; ++i) {
        cur[i] = i;
    }
    for (int i = 0; i < N; ++i) {
        const auto c = GetRequest();
        const auto k = read(A, N <= 5000 ? 13 : 15);
        if (k != K) {
            const auto j = cur[k];
            PutBack(j);
            cur[k] = c;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...