けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 229 B - Hard Calculation (6Q, 灰色, 200 点)

これは上手にやろう!

問題概要

2 つの正の整数  A, B を足すとき、繰り上がりが発生するかどうかを判定せよ。

制約

  •  1 \le A, B \le 10^{18}

考えたこと

一見いかめしい問題を解くときには、少しでも思考をシンプルにしていこう!

繰り上がりがないというのは、次のことと同値である。


一の位, 十の位, ... と考えていったときに、どの桁についても、桁の値の和が 9 以下である


つまり、この条件を満たすかどうかを判定すればよいのだ。

実装方針は色々考えられる。僕は整数を文字列として入力を受け取ることとした。そして、文字列 A, B をそれぞれ右側(一の位側)から見ていきたいので、A, B をそれぞれ reverse して、左側から順に見ていくこととした。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    string A, B;
    cin >> A >> B;

    reverse(A.begin(), A.end());
    reverse(B.begin(), B.end());

    bool easy = true;
    for (int i = 0; i < min(A.size(), B.size()); i++) {
        int a = A[i] - '0', b = B[i] - '0';
        if (a + b >= 10) easy = false;
    }

    cout << (easy ? "Easy" : "Hard") << endl;
}