天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:
- 只考虑得分不低于 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 人进入推荐名单。
代码
Python3
if __name__ == '__main__':
n, count, xian = input().split()
n = int(n) #学生数量
count = int(count) #提交次数
xian = int(xian) #面试分数线
ret = 0 #返回值
pta = [0 for _ in range(291)] #创建存储PTA测试成绩的数组
mian = [0 for _ in range(291)] #创建存储面试成绩的数组
for i in range(n):
#获得成绩
p, mi = input().split()
p = int(p)
mi = int(mi)
if p>=175:
pta[p] += 1;
if mi>=xian:
mian[p] += 1
while count:
#获得结果
for j in range(175, 291):
if (pta[j] > 0):
ret += 1
pta[j] -= 1
while (pta[j] > 0 and mian[j] > 0):
ret+=1
pta[j] -= 1
mian[j] -= 1
count-=1
print(ret)
C
#include<stdio.h>
int aa[291]={0},bb[291]={0};
int main(){
int n,k,s,fen1,fen2,sum=0,i;
scanf("%d%d%d",&n,&k,&s);
while(n--){
scanf("%d%d",&fen1,&fen2);
if(fen1>=175)
aa[fen1]++;
if(fen2>=s)
bb[fen1]++;
}
while(k--){
for(i=175;i<=290;i++){
if(aa[i]>0){
sum++;
aa[i]--;
while(aa[i]>0&&bb[i]>0){
sum++;
aa[i]--;
bb[i]--;
}
}
}
}
printf("%d",sum);
}
解题思路:
最初的想法是将每个学生的成绩存在一个二维数组中,剩下的麻烦代码也写出来了,但是喜提超时.
现修改的代码思路如下:
由于同分数情况下,只需要面试成绩过分数线即可推荐,例如有例子:[198,0],[189,0],[189,90],[189,91] 为了推荐最大化,优先推荐一个面试分数为0的学生,再推荐面熟分数大于等于90分的同学,这是,第一次推荐可以推荐[198,0],[189,90],[189,91]三位同学,只要第一位满足面试分数为0,剩下跟着的同学面试分数大于等于分数线即可.
在数据结构上,我们将同一分数线的记录在一个下表值中,例如[198,0],[189,0],[189,90],[189,91]四位同学,PTA数组中,PTA[189]=4,mian[189]=2(4位同学PTA分数达到了189,2为同学面试成绩大于分数线),此时取出推荐同学时,先取出面试成绩为0的同学,同时判断是否有同分且通过面试成绩的人,一同输出即可.
下标 | 188 | 189 | 190 |
PTA测试成绩 | ... | 4 | ... |
面试成绩 | ... | 2 | ... |
第一次 提取PTA成绩189分 但是面试0分的同学,此时
下标 | 188 | 189 | 190 |
PTA测试成绩 | ... | 4-1=3 | ... |
面试成绩 | ... | 2 | ... |
紧接着 还有同学PTA测试189分 面试成绩达到了分数线 一同推荐
下标 | 188 | 189 | 190 |
PTA测试成绩 | ... | 3-1=1 | ... |
面试成绩 | ... | 2-2=0 | ... |
推荐一轮后
下标 | 188 | 189 | 190 |
PTA测试成绩 | ... | 1 | ... |
面试成绩 | ... | 0 | ... |
以此循环