Official
A - 合格者数の集計 / Counting the Number of Successful Applicants Editorial
by
A - 合格者数の集計 / Counting the Number of Successful Applicants Editorial
by
MMNMM
初心者の方へ
- 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 入門用コンテンツです。
この問題は、与えられる \(B _ {i,j}\ (1\le i\le N,1\le j\le A _ i)\) の値のうち、\(K\) 以上であるものがいくつあるかを求めることで解くことができます。
問題の入力形式に従って正しく \(B _ {i,j}\) を読み込むことができれば、if 文などを使って答えを求めることができます。 デバッグの際には、読み込んだ \(B _ {i,j}\) をそのまま出力してみて、想定通りの値を読み込めているか確認するのもよいでしょう。
実装例は以下のようになります。
#include <iostream>
using namespace std;
int main(){
int N, K;
cin >> N >> K;
int ans = 0; // 合格者数のカウンター
for (int i = 0; i < N; ++i) {
int A;
cin >> A; // 人数を読み込んで
for (int j = 0; j < A; ++j) { // 人数分の点数を読み込む
int B;
cin >> B;
if (B >= K) { // 点数が合格点以上なら
++ans; // 合格者数を増やす
}
}
}
cout << ans << endl; // 答えを出力
return 0;
}
N, K = map(int, input().split())
ans = 0 # 合格者数のカウンター
for _ in range(N):
A, *B = map(int, input().split()) # 人数と点数に分けて読み込む
for b in B: # それぞれの点数について
if b >= K: # 合格点以上なら
ans += 1 # 合格者数を増やす
print(ans) # 答えを出力
入力される \(B\) を正しく読み込んだあとの処理については、「リストからなるリストをすべて連結して \(1\) つのリストにする」や「リストに含まれる要素のうち条件を満たすものの個数をカウントする」などの機能が用意されている言語では、答えを求めるための実装量をより少なくできる場合があります。
#include <iostream>
#include <vector>
#include <algorithm>
#include <ranges>
using namespace std;
int main(){
int N, K;
cin >> N >> K;
vector<vector<int>> B(N); // 点数を入れる(可変長)配列の(可変長)配列
for (int i = 0; i < N; ++i) {
int A;
cin >> A; // 人数を読み込んで
B[i].resize(A);
for (int& b : B[i]) {
cin >> b; // 人数分点数を読み込む
}
}
cout << ranges::count_if( // 列から条件を満たす要素を数える関数
B | views::join, // 配列の配列を連結してひとつの列にまとめる
[K](int b) { return b >= K; } // 点数が K 以上であるかを判定する
) << endl;
return 0;
}
N, K = map(int, input().split())
B = [list(map(int, input().split()))[1:] for _ in range(N)] # 各行を先頭だけ除いて読み込む
print(len([b for line in B for b in line if b >= K])) # リストのリストを順に見て、K 以上のものだけ残した個数が答え
posted:
last update:
