題目描述

有一個離散數學的教授開了一門有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

範例輸出

YES
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");
        }
    }
}