ABC 174

https://atcoder.jp/contests/abc174

A. Air Conditioner

https://atcoder.jp/contests/abc174/tasks/abc174_a

B. Distance

https://atcoder.jp/contests/abc174/tasks/abc174_b

C. Repsept

https://atcoder.jp/contests/abc174/tasks/abc174_c

D. Alter Altar

https://atcoder.jp/contests/abc174/tasks/abc174_d

E. Logs

https://atcoder.jp/contests/abc174/tasks/abc174_e

自力 AC.

全ての丸太の長さを $x$ 以下のする場合に必要な切る回数を $f(x)$ とする。 $f(x) \leq K$ を満たす最小の $x$ が求める答え。 これは二分探索で求めることができる。

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll N, K;
    cin >> N >> K;
    vll A(N);
    rep(i, N) cin >> A[i];

    auto f = [&](ll x) -> ll {
        ll ret = 0;
        for (ll a : A) ret += (a + x - 1) / x - 1;
        return ret;
    };

    ll ac = INF, wa = 0;
    while (ac - wa > 1) {
        ll wj = (ac + wa) / 2;
        if (f(wj) <= K) {
            ac = wj;
        } else {
            wa = wj;
        }
    }
    cout << ac << endl;
}

F. Range Set Query

https://atcoder.jp/contests/abc174/tasks/abc174_f