解いた問題

7/19/2012

SRM439 Div2 Medium

500

とりあえずいくつか足して貪欲に変換していったら通った。



const int M = 10000000 + 1;

class PouringWater {
public:
  int getMinBottles(int N, int K)
  {
    if (N < K) return 0;

    const int B = 30;
    for (int m = 0; m <= M; ++m) {
      lli n = m + N;
      lli b = n;
      for (int i = 0; i + 1 < B; ++i) {
        b -= n;
        b += (n % 2) + (n / 2);
        n /= 2;
        if (b <= K) return m;
      }
    }

    return -1;
  }
};