PTA-L1-088 静静的推荐(题解)

文章讲述了如何解决一个编程竞赛中的问题,题目要求构建一个推荐名单系统,考虑学生的PAT考试成绩和天梯赛成绩。通过使用数组记录不同分数段的人数,确保名单递增且不超过指定批次。重点在于处理PAT分数达标的学生情况。作者分享了简洁的代码实现,并反思了当初解题时的误区,旨在帮助遇到同样问题的人。
摘要由CSDN通过智能技术生成

PTA-L1-088 静静的推荐(题解)

一、题目

在这里插入图片描述
在这里插入图片描述

二、思路和代码

思路(依据)

  1. 对于分数没有达到175的人以下条件都不用考虑
  2. 对于PAT分数没有达标的人,使用一个数组来映射0~290分的人数,只要该人数没有超过K就还可以增加人数,否则就不能增加了。
  3. 对于PAT分数达标的人则无需处理,企业会直接录取,所以不用将该人数加入到上面的数组中。

对于2点而言是为了使其满足以下条件

  • 一共接受 K 批次的推荐名单;
  • 同一批推荐名单上的学生的成绩原则上应严格递增;

对于第3点而言是为了满足如下条件

  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

代码

#include<iostream>
using namespace std;

int main() {
	int N, K, S; cin >> N >> K >> S;
	// mp记录当前0~290分的人数,如果大于了K就不能继续增加
	// 原因:1. 同一批推荐名单上的学生的成绩原则上应严格递增
	//  	 2 .一共接受 K 批次的推荐名单
	// 所以同一分数的(不含特殊情况(参加过 PAT 考试且且成绩达到了该企业的面试分数线))
	// 因为递增,所以不能为同一批且最大批次为K 
	int cnt = 0, mp[291] = {0};
	for(int i=0; i<N; i++) {
		int tts, pat; cin >> tts >> pat;
		// 1. 只考虑得分不低于 175 分的学生;
		if(tts < 175) continue;
		if(pat >= S) cnt++;
		else if(mp[tts] < K) cnt++, mp[tts]++;
	}
	cout << cnt << endl;
	return 0;
}

三、其他

当时参加比赛时这道题直接卡我一个多小时,为了分数能够高点不得以放弃这道题,回想起来才发现是当时想复杂了,被他的题目描述给误导了,直接陷入了死胡同😔
现在比赛结束回顾这道题时发现网上的代码虽然很简洁但是大多数都没有讲解为什么,为了我下次还能想起所以写了该博客,也是为了拥有同样的烦恼的人提供帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值