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

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

AtCoder ABC 184 B - Quizzes (8Q, 灰色, 200 点)

for 文のいい練習問題!

問題概要

高橋君は  N 問のクイズに答える。最初  X 点であり、正解すると 1 点増加する。不正解だと 1 点減少するが、不正解前に 0 点である場合は減らない。

高橋君が各問題に正解したかどうかを表す文字列  S が与えられる。 S_{i} が 'o' のときは  i 問目に正解したことを表し、'x' のときは不正解であったことを表す。

高橋君の最終的な得点を求めよ。

考えたこと

文字列  S を前から順に見ていけばよい。

高橋君のスコアを表す変数 X(初期値は  X)を用意して、for 文を用いて、 i = 0, 1, \dots, N-1 に対して、次のように処理する。

  • S[i] == 'o' のとき:X を 1 増やす
  • そうでないとき:Xmax(X - 1, 0) に更新する

コード

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

int main() {
    int N, X;
    string S;
    cin >> N >> X >> S;

    for (int i = 0; i < N; i++) {
        if (S[i] == 'o') ++X;
        else X = max(X-1, 0);
    }
    cout << X << endl;
}