公式

B - ARC Division 解説 by MMNMM


この問題は、for 文や if 文を適切に使うことで解くことができます。

読み込んだ \(N,R\) の値をもとに、以下のようなアルゴリズムを実装すればこの問題を解くことができます。

  • \(N\) 回以下を繰り返す。
    • 入力から \(D,A\) を受け取り、\(D\) の値によって以下のどちらかを行う。
      • \(D=1\) のとき、現在の \(R\) が \(1600\leq R\leq2799\) を満たすなら、\(R\leftarrow R+A\) と更新する。
      • \(D=2\) のとき、現在の \(R\) が \(1200\leq R\leq2399\) を満たすなら、\(R\leftarrow R+A\) と更新する。

実装例は以下のようになります。

実装例 (C++)

#include <iostream>
using namespace std;

int main() {
    int N, R;
    cin >> N >> R;
    
    for (int i = 0; i < N; i++) {
        int division, score;
        cin >> division >> score;

        if (division == 1) // Div. 1 なら
            // Div. 1 の条件をもとに、更新対象ならレーティングを更新
            if (1600 <= R && R <= 2799)
                R += score;

        if (division == 2) // Div. 2 なら
            // Div. 2 の条件をもとに、更新対象ならレーティングを更新
            if (1200 <= R && R <= 2399)
                R += score;
    }

    // 最終的なレーティングを出力
    cout << R << endl;
    return 0;
}

実装例 (Python)

N, R = map(int, input().split())

for i in range(N):
    D, A = map(int, input().split())
    if D == 1:  # Div. 1 なら
        # Div. 1 の条件をもとに、更新対象ならレーティングを更新
        if 1600 <= R <= 2799:
            R += A
    if D == 2:  # Div. 2 なら
        # Div. 2 の条件をもとに、更新対象ならレーティングを更新
        if 1200 <= R <= 2399:
            R += A

# 最終的なレーティングを出力
print(R)

投稿日時:
最終更新: