Submission #440529

#TimeUsernameProblemLanguageResultExecution timeMemory
440529prvocisloLast supper (IOI12_supper)C++17
100 / 100
199 ms9756 KiB
#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;

const pair<int, int> nic = {-1, -1};
void ComputeAdvice(int *c, int n, int k, int m) // pole requestov, |c| = pocet farieb, velkost palety, max pocet otazok
{
  vector<int> up(n+k, 0), a(n+k), lst(n, 1e9), nxt(n+k, 1e9);
  for (int i = 0; i < k; i++) a[i] = i;
  for (int i = 0; i < n; i++) a[i+k] = c[i];
  for (int i = n+k-1; i >= 0; i--)
  {
    nxt[i] = lst[a[i]];
    lst[a[i]] = i;
  }
  set<pair<int, int>, greater<pair<int, int> > > s; // {nabuduce, kedy som to tam vlozila}
  vector<pair<int, int> > val(n, nic); // hodnota ktoru tato farba vlozila do setu
  for (int i = 0; i < k; i++) val[i] = {nxt[i], i}, s.insert(val[i]);
  for (int i = k; i < n+k; i++)
  {
    if (val[a[i]].first != -1) // tato farba urcite je na leseni a preto doteraz bola na hornej policke
    {
      s.erase(val[a[i]]);
      up[val[a[i]].second] = true;
    }
    else // nemame ju na leseni, musime nieco vyhodit
    {
      pair<int, int> p = *s.begin();
      s.erase(s.begin());
      val[a[p.second]] = nic; 
    }
    val[a[i]] = {nxt[i], i};
    s.insert(val[a[i]]);
  }
  for (int i = 0; i < n+k; i++) WriteAdvice(up[i]);
}
#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;

void Assist(unsigned char *a, int n, int k, int r) {
  set<int> up, dw;
  for (int i = 0; i < k; i++) 
  {
    if (a[i]) up.insert(i);
    else dw.insert(i);
  }
  for (int i = k; i < n+k; i++)
  {
    int c = GetRequest();
    if (up.count(c))
    {
      up.erase(c);
    }
    else
    {
      PutBack(*dw.begin());
      dw.erase(dw.begin());
    }
    if (a[i]) up.insert(c);
    else dw.insert(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...