ABC 423

https://atcoder.jp/contests/abc423

A. Scary Fee

https://atcoder.jp/contests/abc423/tasks/abc423_a

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

    ll X, C;
    cin >> X >> C;

    ll ans = X / (1000 + C) * 1000;
    cout << ans << endl;
}

B. Locked Rooms

https://atcoder.jp/contests/abc423/tasks/abc423_b

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

    ll N;
    cin >> N;

    vint keys(N);
    rep(i, N) cin >> keys[i];

    vll visited(N + 1);
    visited[0] = visited[N] = 1;

    rep(i, N) {
        if (keys[i] == 0) {
            visited[i + 1] = 1;
        } else {
            break;
        }
    }

    for (int i = N - 1; i >= 0; i--) {
        if (keys[i] == 0)
            visited[i] = 1;
        else
            break;
    }

    ll cnt = 0;
    rep(i, N + 1) if (!visited[i]) cnt++;
    cout << cnt << endl;
}

C. Lock All Doors

https://atcoder.jp/contests/abc423/tasks/abc423_c

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

    ll N, R;
    cin >> N >> R;

    vint keys(N);
    rep(i, N) cin >> keys[i];

    fenwick_tree<ll> fw(N);
    rep(i, N) fw.add(i, keys[i]);

    ll lid = INF, rid = -1;

    for (int i = R - 1; i >= 0; i--) {
        if (keys[i] == 0) lid = i;
    }
    for (int i = R; i < N; i++) {
        if (keys[i] == 0) rid = i;
    }

    ll ans = 0;

    if (lid != INF) {
        ll w = R - lid;
        ll cnt = fw.sum(lid, R);
        ans += w + cnt;
    }

    if (rid != -1) {
        ll w = rid + 1 - R;
        ll cnt = fw.sum(R, rid + 1);
        ans += w + cnt;
    }
    cout << ans << endl;
}

D. Long Waiting

https://atcoder.jp/contests/abc423/tasks/abc423_d

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

    ll N, K;
    cin >> N >> K;

    vll A(N), B(N), C(N);
    rep(i, N) cin >> A[i] >> B[i] >> C[i];

    // 退出時間, 人数
    using P = pair<ll, ll>;
    priority_queue<P, vector<P>, greater<P>> pq;

    ll nump = 0;

    int id = 0;

    vll ans(N);

    while (nump + C[id] <= K && id < N) {
        pq.push({A[id] + B[id], C[id]});
        ans[id] = A[id];
        nump += C[id];
        id++;
    }

    while (pq.size()) {
        auto [exit_time, exit_num] = pq.top();
        pq.pop();

        nump -= exit_num;
        while (nump + C[id] <= K && id < N) {
            pq.push({max(A[id], exit_time) + B[id], C[id]});
            nump += C[id];
            ans[id] = max(A[id], exit_time);
            id++;
        }
    }

    for (ll x : ans) cout << x << '\n';
}

E. Sum of Subarrays

https://atcoder.jp/contests/abc423/tasks/abc423_e

F. Loud Cicada

https://atcoder.jp/contests/abc423/tasks/abc423_f

G. Small Multiple 2

https://atcoder.jp/contests/abc423/tasks/abc423_g