Submission #1035502

#TimeUsernameProblemLanguageResultExecution timeMemory
1035502thinknoexitLast supper (IOI12_supper)C++17
20 / 100
320 ms83052 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; using ll = long long; void ComputeAdvice(int* C, int _N, int K, int M) { int n = _N; int bit = 31 - __builtin_clz(n - 1); for (int j = 0;j < n;j++) { for (int i = bit;i >= 0;i--) { WriteAdvice((C[j] >> i) & 1); } } }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; using ll = long long; bool in[100100]; queue<int> q[100100]; void Assist(unsigned char* A, int _N, int K, int R) { int n = _N; int bit = 32 - __builtin_clz(n - 1); for (int i = 0;i < R; i += bit) { int now = 0; for (int j = i;j < i + bit;j++) now = (now << 1) | A[j]; q[now].push(i / bit); } for (int i = 0;i < n;i++) q[i].push(n); set<pair<int, int>, greater<pair<int, int>>> s; for (int i = 0;i < K;i++) s.insert({ q[i].front(), i }), in[i] = 1; for (int i = 0;i < n;i++) { // for (auto& x : s) { // cout << x.second << ' '; // } // cout << '\n'; int req = GetRequest(); int prev = q[req].front(); q[req].pop(); if (in[req]) { s.erase({ prev, req }); s.insert({ q[req].front(), req }); continue; } auto x = s.begin(); PutBack(x->second); in[x->second] = 0; s.erase(x); in[req] = 1; s.insert({ q[req].front(), req }); } }
#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...