公式
A - 共通の好きな曲 / Common Favorite Songs 解説
by
A - 共通の好きな曲 / Common Favorite Songs 解説
by
kyopro_friends
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
1人が同じ曲を複数回選ぶことはないため、「全員に選ばれた」は「\(N\) 回選ばれた」と同値です。よって、各曲が選ばれた回数を記録することで答えを求めることができます。
計算量は \(O(N+M+\sum K_i)\) になります。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
vector<int>cnt(m+1);
for(int i=0; i<n; i++){
int k;
cin >> k;
for(int j=0; j<k; j++){
int c;
cin >> c;
cnt[c]++;
}
}
int ans = 0;
for(int i=1; i<=m; i++){
if(cnt[i] == n){
ans++;
}
}
cout << ans << endl;
}
実装例 (Python)
N, M = map(int, input().split())
cnt = [0] * (M+1)
for _ in range(N):
K, *C = map(int, input().split())
for c in C:
cnt[c] += 1
ans = 0
for v in cnt:
if v == N:
ans += 1
print(ans)
なお、python には set の積集合を求める演算子が存在するため、これを用いることでも問題を解くことができます。
実装例 (Python)
N, M = map(int, input().split())
cnt = [0] * (M+1)
ans = set(range(1, M+1))
for _ in range(N):
K, *C = map(int, input().split())
ans &= set(C)
print(len(ans))
投稿日時:
最終更新:
