답안 #362997

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
362997 2021-02-05T02:19:27 Z casperwang 최후의 만찬 (IOI12_supper) C++14
0 / 100
437 ms 19264 KB
#include <bits/stdc++.h>
#include "advisor.h"
#define pb emplace_back
#define pii pair<int,int>
#define ff first
#define ss second
using namespace std;
#define debug(args...) kout("[ " + string(#args) + " ]", args)
void kout() { cerr << endl; }
template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); }
template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; }

const int MAXN = 100000;
const int P = 17;
vector <int> nxt[MAXN+1];
vector <int> cur;
vector <int> pos;
vector <bool> inseg;

class Seg {
private:
  pii arr[MAXN*4+5];
  void pull(int now) {
    arr[now] = max(arr[now*2], arr[now*2+1]);
  }
public:
  void build(int now, int l, int r) {
    if (l == r) {
      arr[now] = pii(*nxt[l].begin(), l);
      return;
    }
    int mid = l + r >> 1;
    build(now*2  , l, mid);
    build(now*2+1,mid+1,r);
    pull(now);
    return;
  }
  void mdy(int p, int id, int now, int l, int r) {
    if (l == p && r == p) {
      arr[now] = pii(nxt[id][cur[id]], l);
      return;
    } else if (l > p || r < p) return;
    int mid = l + r >> 1;
    mdy(p, id, now*2  , l, mid);
    mdy(p, id, now*2+1,mid+1,r);
    pull(now);
    return;
  }
  pii qry() {
    return arr[1];
  }
} seg;

void init(int *C, int N, int K, int M) {
  cur.resize(N);
  pos.resize(K);
  inseg.resize(N);
  for (int i = 0; i < N; i++) nxt[C[i]].pb(i);
  for (int i = 0; i < N; i++) nxt[i].pb(N);
  for (int i = 0; i < K; i++) inseg[i] = true;
  for (int i = 0; i < K; i++) pos[i] = i;
}

void Write(int num) {
  for (int i = 0; i < P; i++) {
    if ((1<<i) & num)
      WriteAdvice(1);
    else
      WriteAdvice(0);
  }
}

void ComputeAdvice(int *C, int N, int K, int M) {
  init(C, N, K, M);
  seg.build(1, 0, K-1);
  for (int i = 0; i < K; i++)
    cur[i]++;
  for (int i = 0; i < N; i++) {
    if (inseg[C[i]]) continue;
    auto [_t, p] = seg.qry();
    inseg[pos[p]] = false;
    Write(pos[p]);
    pos[p] = C[i];
    inseg[C[i]] = true;
    seg.mdy(p, C[i], 1, 0, K-1);
    cur[C[i]]++;
  }
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;
#define debug(args...) kout("[ " + string(#args) + " ]", args)
void kout() { cerr << endl; }
template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); }
template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; }

const int MAXN = 100000;
const int P = 17;
vector <int> id;
vector <bool> inseg;

void init(int N, int K, int M) {
  id.resize(N);
  inseg.resize(N);
  for (int i = 0; i < K; i++) inseg[i] = true;
  for (int i = 0; i < K; i++) id[i] = i;
  for (int i = K; i < N; i++) id[i] = -1;
}

int fnd(unsigned char *A, int a) {
  int st = a * P, num = 0;
  for (int i = st; i < st + P; i++) {
    if ((int)A[i]) num += (1<<(i-st));
  }
  return num;
}

void Assist(unsigned char *A, int N, int K, int R) {
  init(N, K, R);
  int now = 0;
  for (int i = 0; i < N; i++) {
    int req = GetRequest();
    if (!inseg[req]) {
      inseg[req] = true;
      int num = fnd(A, now++);
      PutBack(num);
      inseg[num] = false;
      id[req] = id[num];
      id[num] = -1;
    }
  }
}

Compilation message

advisor.cpp: In member function 'void Seg::build(int, int, int)':
advisor.cpp:32:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   32 |     int mid = l + r >> 1;
      |               ~~^~~
advisor.cpp: In member function 'void Seg::mdy(int, int, int, int, int)':
advisor.cpp:43:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   43 |     int mid = l + r >> 1;
      |               ~~^~~
advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:80:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   80 |     auto [_t, p] = seg.qry();
      |          ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3232 KB Output isn't correct - not an optimal way
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 38 ms 4592 KB Output isn't correct - not an optimal way
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 316 ms 14728 KB Output isn't correct - not an optimal way
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 3544 KB Error - advice is too long
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 379 ms 18060 KB Output isn't correct - not an optimal way
2 Incorrect 364 ms 17932 KB Output isn't correct - not an optimal way
3 Incorrect 347 ms 17188 KB Output isn't correct - not an optimal way
4 Incorrect 346 ms 17552 KB Output isn't correct - not an optimal way
5 Incorrect 353 ms 17172 KB Output isn't correct - not an optimal way
6 Incorrect 350 ms 17188 KB Output isn't correct - not an optimal way
7 Incorrect 354 ms 17108 KB Output isn't correct - not an optimal way
8 Incorrect 359 ms 17152 KB Output isn't correct - not an optimal way
9 Incorrect 350 ms 16996 KB Output isn't correct - not an optimal way
10 Incorrect 437 ms 19264 KB Output isn't correct - not an optimal way