Submission #1078109

# Submission time Handle Problem Language Result Execution time Memory
1078109 2024-08-27T12:50:22 Z Pbezz Last supper (IOI12_supper) C++14
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;

void ComputeAdvice(int *C, int n, int k, int m) {
  int inf = 2*n;
  set<int> cur;
  set<pair<int, int>> pri;
  vector<set<int>> nxt(n);
  for(int i = 0; i < n; ++i){
    nxt[C[i]].insert(i);
  }
  for(int i = 0; i < n; ++i){
    nxt[i].insert(inf);
  }
  for(int i = 0; i < k; ++i){
    cur.insert(i);
    pri.insert({-*nxt[i].begin(),i});
  }
  vector<int> rem(n);
  for(int i = 0; i < n; ++i){
    /*for(auto[x, y] : pri)
      printf("%i %i", x, y);
    printf("\n");*/
    int c = C[i];
    if(cur.find(c) != cur.end()){
      rem[i] = -1;
      pri.erase({-*nxt[c].begin(),c});
      nxt[c].erase(nxt[c].begin());
      pri.insert({-*nxt[c].begin(),c});
    }else{
      auto[x, cr] = *pri.begin();
      rem[i] = cr;
      pri.erase(pri.begin());
      cur.erase(cr);
      nxt[c].erase(nxt[c].begin());
      pri.insert({-*nxt[c].begin(),c});
      cur.insert(c);
    }
  }
  /*for(int r : rem)
    printf("%i ", r);
  printf("\n");*/
  vector<int> lst(n, -1);
  vector<unsigned char> sol(n+k, 0);
  for(int i = 0; i < k; ++i){
    lst[i] = i;
  }
  for(int i = 0; i < n; ++i){
    int c = C[i];
    int r = rem[i];
    if(r == -1){
      sol[lst[c]] = 1;
    }else{
      sol[lst[r]] = 0;
    }
    lst[c] = i+k;
  }
  for(unsigned char bit : sol){
    WriteAdvice(bit);
  }
  /*for(unsigned char c : sol)
    printf("%i", c);
  printf("\n");*/
}

void Assist(unsigned char *A, int n, int k, int r) {

  int i;
  set<pair<unsigned char, int>> shelf;
  for(i = 0; i < k; i++){
    shelf.insert({A[i], i});
  }
  for (i = 0; i < n; i++) {
    int c = GetRequest();
    if(shelf.find({1, c}) != shelf.end()){
      shelf.erase({1, c});
      shelf.insert({A[i+k], c});
      continue;
    }
    PutBack(shelf.begin()->second);
    shelf.erase(shelf.begin());
    shelf.insert({A[i+k], c});
  }
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;

void ComputeAdvice(int *C, int n, int k, int m) {
  int inf = 2*n;
  set<int> cur;
  set<pair<int, int>> pri;
  vector<set<int>> nxt(n);
  for(int i = 0; i < n; ++i){
    nxt[C[i]].insert(i);
  }
  for(int i = 0; i < n; ++i){
    nxt[i].insert(inf);
  }
  for(int i = 0; i < k; ++i){
    cur.insert(i);
    pri.insert({-*nxt[i].begin(),i});
  }
  vector<int> rem(n);
  for(int i = 0; i < n; ++i){
    /*for(auto[x, y] : pri)
      printf("%i %i", x, y);
    printf("\n");*/
    int c = C[i];
    if(cur.find(c) != cur.end()){
      rem[i] = -1;
      pri.erase({-*nxt[c].begin(),c});
      nxt[c].erase(nxt[c].begin());
      pri.insert({-*nxt[c].begin(),c});
    }else{
      auto[x, cr] = *pri.begin();
      rem[i] = cr;
      pri.erase(pri.begin());
      cur.erase(cr);
      nxt[c].erase(nxt[c].begin());
      pri.insert({-*nxt[c].begin(),c});
      cur.insert(c);
    }
  }
  /*for(int r : rem)
    printf("%i ", r);
  printf("\n");*/
  vector<int> lst(n, -1);
  vector<unsigned char> sol(n+k, 0);
  for(int i = 0; i < k; ++i){
    lst[i] = i;
  }
  for(int i = 0; i < n; ++i){
    int c = C[i];
    int r = rem[i];
    if(r == -1){
      sol[lst[c]] = 1;
    }else{
      sol[lst[r]] = 0;
    }
    lst[c] = i+k;
  }
  for(unsigned char bit : sol){
    WriteAdvice(bit);
  }
  /*for(unsigned char c : sol)
    printf("%i", c);
  printf("\n");*/
}

void Assist(unsigned char *A, int n, int k, int r) {

  int i;
  set<pair<unsigned char, int>> shelf;
  for(i = 0; i < k; i++){
    shelf.insert({A[i], i});
  }
  for (i = 0; i < n; i++) {
    int c = GetRequest();
    if(shelf.find({1, c}) != shelf.end()){
      shelf.erase({1, c});
      shelf.insert({A[i+k], c});
      continue;
    }
    PutBack(shelf.begin()->second);
    shelf.erase(shelf.begin());
    shelf.insert({A[i+k], c});
  }
}

Compilation message

advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:32:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   32 |       auto[x, cr] = *pri.begin();
      |           ^
advisor.cpp: In function 'void Assist(unsigned char*, int, int, int)':
advisor.cpp:75:13: error: 'GetRequest' was not declared in this scope
   75 |     int c = GetRequest();
      |             ^~~~~~~~~~
advisor.cpp:81:5: error: 'PutBack' was not declared in this scope
   81 |     PutBack(shelf.begin()->second);
      |     ^~~~~~~

assistant.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
assistant.cpp:32:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   32 |       auto[x, cr] = *pri.begin();
      |           ^
assistant.cpp:60:5: error: 'WriteAdvice' was not declared in this scope; did you mean 'ComputeAdvice'?
   60 |     WriteAdvice(bit);
      |     ^~~~~~~~~~~
      |     ComputeAdvice