題目描述
有一個離散數學的教授開了一門有N個學生的課程。但教授對他那些遲到的學生感到很不滿,如果開始上課時的學生人數小於K,就會取消這堂課程。
給定每個學生到達課堂上的時間,判斷課程是否會被取消。
原題網址
輸入格式
第一行輸入測試資料的數量T,範圍在1到10之間(包含1和10)。
每個測試資料都有兩行,第一行輸入學生的數量N,範圍在1到100之間(包含1和100),以及學生數量小於多少K課程會被取消,K的範圍在1到N之間(包含1和N)。第二行輸入每個學生i到達課堂上的時間ai。若輸入的時間ai不是正整數(≤0),表示學生提早或是及時到達課堂;若為正整數(>0),則表示學生遲到了。ai的範圍在-100到100之間(包含-100和100)。
輸出格式
對每個測試資料進行計算,若課程被取消,輸出「YES」,否則輸出「NO」。
範例輸入
2
4 3
-1 -3 4 2
4 2
0 -1 2 1
4 3
-1 -3 4 2
4 2
0 -1 2 1
範例輸出
YES
NO
NO
額外解釋
第一組測試資料中,K=3,代表教授希望至少有三個學生準時在教室上課,但只有兩個學生準時到達(-1和-3),因此課程被取消。
第二組測試資料中,K=2,代表教授希望至少有兩個學生準時在教室上課,而確實有兩個學生準時到達(0和-1),因此課程不被取消。
解題概念
這題情境有點複雜,簡單來說就是要計算非正整數的數量,如果數量小於K,輸出「YES」,否則輸出「NO」。
參考答案
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) throws Exception {
final Scanner sc = new Scanner(System.in);
int testCase = sc.nextInt();
while (testCase-- > 0) {
final int n = sc.nextInt();
final int k = sc.nextInt();
int sum = 0;
for (int i = 0; i < n; ++i) {
final int t = sc.nextInt();
if (t <= 0) {
++sum;
}
}
System.out.println(sum < k ? "YES" : "NO");
}
}
}