BOJ 21820 - Acowdemia I

image.png

이분탐색을 잘 돌려주면 된다.

$c_i$ 를 내림차순 정렬하고 큰것부터 골라가면서 $h$가 가능한지 판별한다.

각 paper당 하나의 citation만 가능하다는 점을 유의하자.

void solve() {
   int N, L;
   cin >> N >> L;
   vi A(N);
   fv(A);
   sort(all(A), greater<>());
   int l = 0, r = N, h = 0;
   while (l <= r) {
      int m = l + r >> 1;
      ll ns = 0;
      for (int i = 0; i < m; i++) {
         int need = max(0, m - A[i]);
         if (need >= 2) {
            ns = 1e9;
            break;
         }
         ns += need;
      }
      if (ns <= L) h = m, l = m + 1;
      else r = m - 1;
   }
   cout << h;
}

Tags:

Categories:

Updated:

Comments