排名预测系统

这篇博客介绍了如何构建一个编程竞赛排名预测系统,从数据匹配、排序到排名维护的五个子任务。首先,通过暴力匹配算法将正式参赛队伍与网络赛成绩关联起来。然后,根据最大成绩和行号对队伍进行排序。接着,利用动态维护排名的方法处理相同成绩的队伍。此外,还分别针对队伍、学校和队内排名进行了详细说明,强调了模块化编程的重要性。
摘要由CSDN通过智能技术生成

排名预测系统

题目链接

题目背景:

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

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

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

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

匹配规则函数

在这里插入图片描述

子任务二:

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

输出封装函数

在这里插入图片描述

子任务三:

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

维护函数:

在这里插入图片描述

子任务四:

其实维护离散的子任务3,用map或者set判断当前的队伍是否第一次出现,若第一次出现,那么维护方法其实和子任务三是一样的,也需要判断当前成绩与上一个第一次出现成绩学校的成绩是否相同,用两个变量维护即可
在这里插入图片描述

子任务五:

离散的子任务四,维护思路同上,维护校内上一个队伍成绩和队内当前排名,用两个map维护即可。
细节参考源码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值