はまやんはまやんはまやん

hamayanhamayan's blog

アゼルバイジャン国民の怒り / Rage of Azerbaijan Citizens [JOI2018 予選模試 B]

https://www.hackerrank.com/contests/joi2018/challenges/rage-of-azerbaijan-citizens

解説

Xの城がYの城を攻撃するのも、Yの城がXの城を攻撃するのも変わらないので、
D=2のときは、DkとPkを入れ替えて、全てD=1のようにして処理する。
あとは、ルールに従って、人数を減らせば良い。
最後に総和を取って答え。

int N, M; ll A[101], B[101]; int T;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> M;
    rep(i, 0, N) cin >> A[i];
    rep(i, 0, M) cin >> B[i];
    cin >> T;
    rep(t, 0, T) {
        int D, a, b; cin >> D >> a >> b; a--; b--;
        if (D == 2) swap(a, b);

        if (A[a] <= B[b]) {
            B[b] -= A[a];
            A[a] = 0;
        } else {
            A[a] -= B[b];
            B[b] = 0;
        }
    }
    ll sm_a = 0, sm_b = 0;
    rep(i, 0, N) sm_a += A[i];
    rep(i, 0, M) sm_b += B[i];
    cout << sm_a << endl << sm_b << endl;
}