公式

B - ARC Division 解説 by en_translator


This problem can be solved by using for and if statements appropriately.

One can solve the problem by implementing the following algorithm after reading the values \(N\) and \(R\):

  • Repeat the following \(N\) times.
    • Read \(D\) and \(A\) from the input. Do one of the following depending on the value \(D\):
      • If \(D=1\), and if the current \(R\) satisfies \(1600\leq R\leq2799\), then set \(R\leftarrow R+A\).
      • If \(D=2\), and if the current \(R\) satisfies \(1200\leq R\leq2399\), then set \(R\leftarrow R+A\).

The following is sample code.

Sample code (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) // If it's a Div.1 contest
            // Update the rating subject to the Div.1 criteria
            if (1600 <= R && R <= 2799)
                R += score;

        if (division == 2) // If it's a Div.2 contest
            // Update the rating subject to the Div.2 criteria
            if (1200 <= R && R <= 2399)
                R += score;
    }

    // Print the final rating
    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 なら
        # Update the rating subject to the Div.1 criteria
        if 1600 <= R <= 2799:
            R += A
    if D == 2:  # Div. 2 なら
        # Update the rating subject to the Div.2 criteria
        if 1200 <= R <= 2399:
            R += A

# Print the final rating
print(R)

投稿日時:
最終更新: