排名预测系统

排名预测系统

题目链接

题目背景:

本题大模拟来自真实的需求,即:综合三场网络赛的名次,来预计一个正式队伍在所有正式参赛队伍中的名次以此来估计自己能不能拿牌。本来只有一道题,即为你们看到的T5,经过讨论后决定降低难度,分为五个部分,这五个部分由简单到难,最终实现一个较为复杂的系统,这也启示着我们,如果一道题目较为复杂,那么试着抓住主干,将最需要完成的部分先完成将代码跑起来,而不是陷入茫茫的细节中无法自拔,所以在做大模拟时,必须先抽象出整体框架再来填充细节。
本道题的解题思路如下:
1.参赛队伍与源数据进行匹配
2.根据匹配的源数据进行排序
3.维护队伍排名
4.维护校排名
5.维护队内排名

子任务一:参赛队伍与源数据匹配

由于参赛的队伍具体人员可能与网络赛队伍不同,所以需要先将正式参赛的队伍与网络赛成绩关联起来,具体的关联规则是:1.单挑2.两人及以上重复队员出现
在子任务一中其实可以再划分成更小的子任务,即先不考虑具体匹配了谁。先将两条数据关联起来。用两个结构体来维护。具体如下:
排名预测系统_第1张图片

contestInf存储网络赛信息
Realcontest放区域赛信息,用matched存放匹配的具体比赛,其中用matchname存放匹配的人名,其它变量含义见名知意,具体匹配只需要暴力n*m,根据匹配规则将数据和队伍关联起来即可。

匹配规则函数

排名预测系统_第2张图片

子任务二:

完成子任务一后子任务二就很简单了,只需要维护所有匹配队伍的最大成绩,以此作为第一关键字,输入的行号作为第二关键字排序输出即可,这里会发现后面输出的内容一样,所以把A题的输出保存起来到output封装起来,避免格式错误,这也是模块化编程的思路,一步一步封装细节,提高代码的复用性。
排名预测系统_第3张图片

输出封装函数

排名预测系统_第4张图片

子任务三:

需要考虑的就是队伍排名重复如何维护,只需要判断当前成绩是否与上一个队伍成绩相同,如果相同则名次不变,但是要维护一下相同的个数,那么下次不同时排名即为:上一个排名+相同的个数+1

维护函数:

排名预测系统_第5张图片

子任务四:

其实维护离散的子任务3,用map或者set判断当前的队伍是否第一次出现,若第一次出现,那么维护方法其实和子任务三是一样的,也需要判断当前成绩与上一个第一次出现成绩学校的成绩是否相同,用两个变量维护即可
排名预测系统_第6张图片

子任务五:

离散的子任务四,维护思路同上,维护校内上一个队伍成绩和队内当前排名,用两个map维护即可。
细节参考源码:
排名预测系统_第7张图片

你可能感兴趣的:(ACM教程,C)