1. 赛事背景与个人参赛体验
蓝桥杯作为国内最具影响力的IT类学科竞赛之一,已经连续举办了十五届。今年我以C/C++大学B组选手身份全程参与了软件赛省赛环节,从备赛到最终提交的完整过程让我对算法竞赛有了更立体的认识。不同于往届比赛,本届在题目设置和评分标准上都体现出一些值得关注的新趋势。
作为参赛选手,我明显感受到组委会在保持传统算法考察的同时,开始注重工程实践能力的评估。例如在编程题中出现了需要处理实际业务数据的场景,而不仅仅是单纯的算法实现。这种变化要求选手不仅要掌握经典算法,还要具备数据清洗、异常处理等工程化思维。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 赛题结构与难度分析
2.1 题目类型分布
本届省赛延续了往届的基本题型结构,包含:
- 结果填空题(5题,每题5分)
- 程序设计题(5题,每题15分)
- 代码填空题(2题,每题10分)
- 编程大题(3题,每题20分)
但各题型内部的考察重点有所调整。结果填空题不再局限于基础数学计算,而是加入了更多需要算法设计的场景。例如有一题要求计算特定约束条件下的排列组合数,需要选手快速识别出这是典型的动态规划问题。
2.2 典型题目解析
以编程大题中的"最优资源分配"为例:
题目给出n个任务和m台服务器,每个任务有开始结束时间和所需资源量,要求设计算法实现资源利用率最大化。这实际上是区间调度问题的变种,但增加了多维资源约束。
我的解题思路:
- 将任务按结束时间排序(贪心算法基础)
- 使用优先队列维护可用服务器资源
- 实现自定义比较函数处理多维资源约束
- 时间复杂度优化到O(nlogn)通过全部测试用例
cpp复制struct Task {
int start, end;
vector<int> resources;
bool operator<(const Task& other) const {
return end < other.end;
}
};
int scheduleTasks(vector<Task>& tasks, vector<vector<int>>& servers) {
sort(tasks.begin(), tasks.end());
priority_queue<pair<int, ve
