Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 350 B - Dentist Aoki | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 45

問題概要

 1, 2, ..., N に歯が1本ずつ生えている。これらの歯に対して、以下の操作を  Q 回行った後に生えている歯の本数を求めよ。

  • 操作 : 穴  T_i に歯が生えている場合、穴  T_i から歯を抜く。そうでなければ、穴  T_i に歯を生やす。

制約

  • 入力はすべて整数。
  •  1 \leq N, Q \leq 1000
  •  1 \leq T_i \leq N

考察

穴に歯が生えているか否かをbool配列で管理しよう。初期状態は全ての穴に歯が生えているのでtrueで初期化しておく。あとは  Q 回の操作をシュミレーションして、最終的なtrueの個数を数えていくだけ。

コード

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

using ll = long long;

// ======================================== //

int main()
{
    int N, Q;
    cin >> N >> Q;
    vector<bool> teeth(N + 1, true);

    rep(i, 0, Q)
    {
        int T;
        cin >> T;
        teeth[T] = !teeth[T];
    }

    int ans = 0;
    rep(i, 1, N + 1) if (teeth[i]) ans++;

    cout << ans << endl;
}

atcoder.jp

実装時間: 5分以内