1. 项目背景解析
"DAY3洛谷P1068 P2006"这个标题看似简单,实际上包含了算法竞赛选手日常训练的关键信息。作为一名打过多年ACM的老兵,我一眼就看出这是典型的刷题训练日志记录方式——"DAY3"代表训练计划的第三天,"洛谷"是国内知名的在线评测平台,"P1068"和"P2006"则是该平台上的两道题目编号。
这种命名方式在算法竞赛圈非常普遍,选手们常用"DAY+数字"记录系统训练进度,配合平台题目编号形成简洁明了的训练日志。对于刚入门的同学来说,理解这种命名规范是融入竞赛社区的第一步。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目内容剖析
2.1 洛谷P1068分数线划定
这道题目源自NOIP(全国青少年信息学奥林匹克联赛)真题,考察的是基础排序和条件筛选能力。题目大意是:给定n名考生的报名号和笔试成绩,按照成绩从高到低排序后,确定面试分数线。面试人数为计划录取人数的150%(向下取整),最后一名成绩相同的考生均可进入面试。
实际解题时需要处理以下几个关键点:
- 结构体排序:需要同时处理考生的报名号和成绩
- 分数线计算:注意150%的取整规则
- 同分处理:需要统计分数线上的同分人数
cpp复制struct Candidate {
int id;
int score;
};
bool cmp(Candidate a, Candidate b) {
if(a.score != b.score) return a.score > b.score;
return a.id < b.id;
}
2.2 洛谷P2006赵神牛的游戏
这是一道模拟题,考察对复杂条件的处理能力。题目描述赵神牛开发了一款游戏,角色有攻击力k,游戏中有n个boss,每个boss需要消耗a_i点攻击力,击败后获得b_i点攻击力恢复。需要判断是否能击败所有boss。
解题时需要特别注意:
- 攻击力消耗和恢复的顺序处理
- 边界条件:初始攻击力是否足够击败第一个boss
- 过程中攻击力不能降为0或负数
cpp复制bool canDefeatAll(int k, vector<int>& a, vector<int>& b) {
for(int i = 0; i < a.size(); i++) {
