天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:
- 只考虑得分不低于 175 分的学生;
- 一共接受 K 批次的推荐名单;
- 同一批推荐名单上的学生的成绩原则上应严格递增;
- 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。
给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?
输入格式:
输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。
随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。
输出格式:
在一行中输出静静姐最多能向企业推荐的学生人数。
输入样例:
10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100
输出样例:
8
样例解释:
第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。
代码长度限制
16 KB
Java (javac)
时间限制
1300 ms
内存限制
256 MB
Python (python3)
时间限制
400 ms
内存限制
64 MB
其他编译器
时间限制
200 ms
内存限制
64 MB
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int compete = scan.nextInt();
int recommed = scan.nextInt();
int PTA = scan.nextInt();
int sum = 0;
int[] arr = new int[291]; //由于最高分是290;
for(;compete>0; compete--) {
int a = scan.nextInt();
int b = scan.nextInt();
if(a < 175) //不符合的直接避开
continue;
if(b >= PTA) //已经是从175及以上开始了
sum++; //先搞定特殊条件的;
else {
arr[a]++; //然后把其他分数段学生各自统计个数;
}
}
//下一步, 对于其他分数段的同学进行筛选
for(int j=174; j<arr.length; j++) {
if(arr[j] >= recommed)
sum += recommed;
else
sum += arr[j];
}
System.out.println(sum);
}
}
有疑问留言,谢谢!