zuka
ABCをコツコツ解いていきます。
本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。
これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。
目次
本記事の概要
Atcoderで初心者用のコンテストとして開催されているAtcoder Beginner Contest(通称ABC)を解いていくものです。今回はABC166-B「Trick or Treat」です。
ポイント
map
型を使って誰がお菓子を何個持っているかを管理しましょう。お菓子を持っていない人数をカウントするときは,範囲for
文を使うと便利です。mapの要素へは.first
や.second
を利用してアクセスできます。
おさえるべき内容
map
を使った<int, int>
組の管理と要素へのアクセス
実装
#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
using namespace std;
typedef long long ll;
int main(){
int N, K;
cin >> N >> K;
map<int, int> A;
// main関数内で宣言したものについては初期化を忘れない
rep(i, N) A[i] = 0;
// 条件に合わせて入力を格納していく
rep(i, K){
int d;
cin >> d;
rep(j, d){
int a;
cin >> a;
// aは0インデックスに揃える
a--;
// Aのaインデックスの人が持っているお菓子の数を1増やす
A[a]++;
}
}
int ans = 0;
// Aの要素にアクセスしていく
for (auto a : A){
// mapの要素はpairになっているのでsecondで2番目の要素にアクセスする
if (a.second == 0) ans++;
}
cout << ans << endl;
}
コメント