Official

D - Unauthorized Editorial by MMNMM


この問題は、「高橋くんが現在ログインしている状態にあるか」のフラグを持ちながら操作を処理していくことで解くことができます。

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

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    int N;
    cin >> N;

    // 現在ログインしているかを表すフラグ:はじめはログインしていない
    bool logged_in = false;
    // 認証エラーを返された回数
    int unauthorized = 0;

    for (int i = 0; i < N; ++i) {
        string s;
        cin >> s;

        // ログイン操作なら、フラグを true にする
        if (s == "login") {
            logged_in = true;
        }
        // ログアウト操作なら、フラグを false にする
        if (s == "logout") {
            logged_in = false;
        }
        // ログインしていない状態で非公開ページにアクセスしようとしたとき、認証エラーを返された回数を増やす
        if (s == "private" && !logged_in) {
            unauthorized++;
        }
    }

    cout << unauthorized << endl;
    
    return 0;
}
N = int(input())

# 現在ログインしているかを表すフラグ:はじめはログインしていない
logged_in = False
# 認証エラーを返された回数
unauthorized = 0

for i in range(N):
    s = input()
    # ログイン操作なら、フラグを true にする
    if s == 'login':
        logged_in = True
    # ログアウト操作なら、フラグを false にする
    if s == 'logout':
        logged_in = False
    # ログインしていない状態で非公開ページにアクセスしようとしたとき、認証エラーを返された回数を増やす
    if s == 'private' and not logged_in:
        unauthorized += 1

print(unauthorized)

posted:
last update: