空箱精進日記

精進精進アンド精進

AtCoder ABC 118 B - Foods Loved by Everyone (200 点)

方針

i個目の食べ物が選ばれた回数を保持して、選ばれた回数が人数と等しくなった食べ物の個数が答えになります。
制約がゆるいので、いくつかやりようはありそうです。(i番目の人まで全員が選んだ食べ物を保持する、でも間に合う)

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N, M;
    cin >> N >> M;
    
    // i個目の食べものが選ばれた回数を保持
    vector<int> cnt(M, 0);
    
    for (int i = 0; i < N; ++i) {
        int K_i;
        cin >> K_i;
        for (int j = 0; j < K_i; ++j) {
            int A_ij;
            cin >> A_ij;
            ++cnt[A_ij - 1]; // 0-indexed
        }
    }
    
    int res = 0;
    for (int i = 0; i < M; ++i) {
        if (cnt[i] == N) {
            // N回選ばれた食べ物を数え上げ
            ++res;
        }
    }
    
    cout << res << endl;
    
    return 0;
}