ACM练习 小Z来讲排名规则(WA)【C++ stable_sort稳定排序】
描述
本次比赛严格按照ACM的排名规则进行,但可能很多小伙伴并不太了解这个排名方法,今天小Z来给大家简单说明一下。每个人的排名根据他解出的题目数量、做题时间还有错误提交次数决定,呃。。。在某些特殊情况下跟大家的昵称也有关系哟~不过不要着急去改昵称,毕竟是特殊情况,很难遇到的。下面我具体说明一下。
排名的第一关键字是解出的题目数,也就是说,解出题目数量多的小伙伴一定会排在解出题目数量少的小伙伴前面
如果解出的题目数量相同,则根据“罚时”决定排名,罚时少者靠前。罚时是这样定义的:每道成功解出的题目会造成罚时,其他题目不会;每道成功解出的题目造成的罚时是成功解出该题的时间,加上错误提交次数20分钟(比如一道题目在第30分钟解出,之前错误提交了两次,那么总的罚时就是30+202=70分钟,这里的错误指的是除了Accept之外的所有反馈情况);最终的罚时是所有成功解出题目的罚时的总和。
一道题目正确解出后,再次提交无论结果如何,都不会再对罚时产生任何影响。
如果解出的题目数量和罚时数量都相同,在这个平台上就会按照昵称排序。
举个例子,比如当前有5道题目,你成功解出了1,3,5号题目,1号题目在第5分钟1次解出,第3号题目在第10分钟尝试了一次但是wa了,在第15分钟解出;第5号题目在第20分钟解出,之后你又提交了2次;第2号题目你尝试了4次但是都没有解出;第4号题目你没有尝试。那么最终你的罚时是5 + 0 + 15+1*20 + 0 + 20 = 60分钟,你解出了3道题。假设此时有另外三个小伙伴A,B,C,成绩分别是4题75分钟,3题90分钟,2题20分钟,那么最终的排名是A,你,B,C。
好了,现在给你一些提交记录,按照这个规则试着计算一下吧。
输入
第一行包含一个整数T,代表数据组数。
接下来包含T组测试数据。
每组数据第一行包含三个整数n,m,q,分别代表参赛人数、题目数量、提交记录数量。(1<=n,m,q<=10)
紧接着q行,每行包含4个整数p,t,r,s,意思是p号小伙伴在第t分钟提交了r号题目,得到了s的反馈,若s==0
则代表错误,s==1
代表正确。注意,你的编号就是1号。其他编号的小伙伴只是陪你一起打比赛玩耍的~(1<=p<=n,1<=t<=100,1<=r<=m,s=0或者s=1)
输入保证不存在两个选手,其通过题目数量和罚时相同。
输出
对于每组测试样例,输出一行包含三个整数,分别代表你(1号)的排名、做出的题目数量和罚时
样例输入
1
2 5 10
1 5 1 1
1 6 2 0
1 7 2 0
1 8 2 0
1 9 2 0
1 10 3 0
1 15 3 1
1 20 5 1
1 30 5 1
1 35 5 0
样例输出
1 3 60
提交总是WA,不知道错在哪了。题目给的测试用例
和我自己写的测试用例
都能按照预期运行,是我理解错题意了吗,还是细节/边界问题?还是数组数组大小不够?
我写的测试用例如下:
测试用例1
1
2 5 12
1 5 1 1
1 6 2 0
1 7 2 0
1 8 2 0
1 9 2 0
1 10 3 0
1 11 3 0
1 15 3 1
1 16 3 1
1 20 5 1
1 30 5 1
1 35 5 0
答案:1 3 80
测试用例2
1
2 5 10
1 5 1 1
1 10 3 0
1 15 3 1
1 20 5 1
1 16 3 0
1 9 2 0
1 35 5 0
1 30 5 1
1 7 2 0
1 17 4 1
答案:1 3 77
测试用例3
1
2 5 9
1 1 1 0
2 1 2 1
1 2 2 0
2 2 2 0
2 2 3 0
2 3 3 1
1 3 1 0
1 4 2 0
1 5 1 1
//1 对1 题 时间20*2+5=45
//2 对2 题 时间1+20+3=24
答案:2 1 45
测试用例4
1
3 5 10
1 1 1 0
2 1 2 1
1 2 2 0
2 2 2 0
2 2 3 0
2 3 3 1
1 3 1 0
3 4 1 1
1 4 2 1
1 5 1 1
//1 对2 题 时间20*2+20+5+4=69
//2 对2 题 时间1+20+3=24
//3 对1题 时间 4
答案:2 2 69
测试用例5
1
5 2 10
1 1 1 0
2 10 4 0
3 20 5 1
4 30 2 1
5 40 1 1
1 50 2 0
2 60 4 1
3 70 5 0
4 80 3 1
5 90 2 1
//1 对0 时0
//2 对1 时60+20=80
//3 对1 时20
//4 对2 时30+80=110
//5 对2 时40+90=130
答案:1 0 0
代码
//排名关键字:
//1 解出的题目数
//2 罚时:解答时间+错误次数*20min
//3 昵称
#include<iostream>
#include<algorithm>
using namespace std;class oneTry
{public:int peopleNum;int time;int questionNum;int result;int wrongTime = 0;
};class onePeople
{public:int waQues[100] = { 0 };//尝试某题的次数int quesOK[100] = { 0 };//本题是否通过int pNum = 0;//人的序号int accept = 0;//成功题数int pTime = 0;//罚时
};int compareQuesNum(oneTry a1, oneTry a2)
{return (a1.questionNum < a2.questionNum);
}int compareTryTime(oneTry a1, oneTry a2)
{return (a1.time < a2.time);
}int compareTime(onePeople a1, onePeople a2)
{return (a1.pTime < a2.pTime);
}int compareAcc(onePeople a1, onePeople a2)
{return (a1.accept > a2.accept);
}int main()
{//轮数int play;cin >> play;//人数 题目数量 提交记录数量int totalPeople, totalQuestion, totalTry;cin >> totalPeople >> totalQuestion >> totalTry;//输入每一次尝试结果oneTry onetry[15];int i;for (i = 0; i < totalTry; i++){cin >> onetry[i].peopleNum >> onetry[i].time >> onetry[i].questionNum >> onetry[i].result;}//题号排序stable_sort((onetry + 0), (onetry + totalTry), compareQuesNum);//时间排序stable_sort((onetry + 0), (onetry + totalTry), compareTryTime);//计算每个人的罚时int j;onePeople onepeople[100];for (j = 0; j < totalPeople; j++)//遍历每个人{onepeople[j].pNum = j + 1;for (i = 0; i < totalTry; i++)//查找所有这个人的提交记录{if (onetry[i].peopleNum == onepeople[j].pNum)//是当前人的提交记录{if (onepeople[j].quesOK[onetry[i].questionNum] == 1)//已经通过{continue;}else//未通过{if (onetry[i].result == 0)//提交失败{onepeople[j].waQues[onetry[i].questionNum]++;//尝试次数++}else//提交成功{onepeople[j].accept++;onepeople[j].quesOK[onetry[i].questionNum] = 1;//标记通过onepeople[j].pTime += onepeople[j].waQues[onetry[i].questionNum] * 20 + onetry[i].time;//计算时间}}}}}//给人排序,先排罚时 注意排序稳定性stable_sort((onepeople + 0), (onepeople + totalPeople), compareTime);//排答对数量stable_sort((onepeople + 0), (onepeople + totalPeople), compareAcc);//计算排名int myrand;for (i = 0; i < totalPeople; i++){if (onepeople[i].pNum == 1){myrand = i;}}//输出cout << myrand + 1 << ' ' << onepeople[myrand].accept << ' ' << onepeople[myrand].pTime;system("pause");
}
ACM练习 小Z来讲排名规则(WA)【C++ stable_sort稳定排序】相关推荐
- 小程序排名规则及搜索算法
由于目前小程序排名搜索功能才刚刚上线,因此很多人都不太了解小程序排名规则.今天厦门巨神峰小编给大家分享下小程序排名规则及其搜索算法. 1.根据用户使用小程序的时间长短来排名:可以根据用户使用小程序的时 ...
- 白杨SEO:公众号、小程序微信服务搜索怎么做?搜一搜服务搜索排名规则解析
新知达人, 白杨SEO:公众号.小程序怎么做微信服务搜索? 大纲如下: 1.搜一搜功能有哪些?品牌官方区怎么申请和条件? 2.微信搜一搜的服务搜索是什么? 3.微信公众号怎么做服务搜索? 4.微信小程 ...
- 百度与谷歌排名规则算法的大致区别
以下只是鹰赛网络本人通过自己的几年seo经历总结出的一些关于百度排名与谷歌排名规则算法大致区别的信息,仅供各位参考. 百度的排名规则: 1.百度喜欢收录title里为单个关键字的网页,并且排名很靠前. ...
- 百度排名与谷歌排名规则
刺客通过自己的几年seo经历总结出的一些关于百度排名与谷歌排名规则算法大致区别的信息,仅供各位参考. 下面正式开始讲解 百度的排名规则: 1.百度喜欢收录title里为单个关键字的网页,并且排名很靠前 ...
- 抖音搜索排名规则分析,抖音SEO矩阵系统开发部署
目录 抖音搜索排名规则分析 如何开发及部署SEO系统,帮助企业提升账号关键词排名? URL 请求 请求样例 响应参数 响应样例 抖音搜索排名规则分析 抖音与搜索引擎一样,都有一个推荐排名规则.同样的内 ...
- 白杨SEO:小红书优化排名怎么做?小红书笔记排名规则有哪些?实战举例
前言:这是白杨SEO公众号原创第248篇.为什么想到再写这个,我发现太多人问我这个问题了,另外一个恰好我所在公司也有做小红书,所以再来分享一下.对了,看到末尾,送一个小福利:小红书负面贴怎么处理? 新 ...
- 小明历险记:规则引擎drools教程一
小明是一家互联网公司的软件工程师,他们公司为了吸引新用户经常会搞活动,小明常常为了做活动加班加点很烦躁,这不今天呀又来了一个活动需求,我们大家一起帮他看看. 小明的烦恼 活动规则是根据用户购买订单的金 ...
- bzoj2038[2009国家集训队]小Z的袜子(hose)
bzoj2038[2009国家集训队]小Z的袜子(hose) 题意: 把N只袜子从1到N编号,每次求从编号为L到R的袜子中抽两只,有多大的概率抽到颜色相同的袜子. 题解: 不知道要用什么数据结构,但是 ...
- BZOJ2038 小Z的袜子 (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
最新文章
- 在ArcGIS调坐标系引发的一系列问题
- JS代码优化工具Prepack
- 【计算机网络】FDM和TDM的传输总时间计算
- 决策树1 -- ID3_C4.5算法
- python中的实用模块_python中的常用模块
- 软件研发部门的基础设施
- java linux 写文件_Java读写文件
- js监听移动端手机横竖屏事件
- 使用注册表关闭Windows 10 Defender
- CGfsb [XCTF-PWN]CTF writeup系列2
- 当我开始学微信公众号开发时,我要学什么?
- 蒙鸟云:IDC圈一周热点集锦
- 大学生提高计算机应用能力,大学生计算机应用能力的培养
- SQLite 对时间的支持
- Mysql之子查询20221016
- 如何安装操作系统?过程、图文。
- 使用opencv和python实现图像的智能处理pdf_机器学习:基于OpenCV和Python的智能图像处理...
- SAP 从零起步之 1.2 编辑科目表清单
- android安全漏洞(八)伪造短信(利用原生android4.0漏洞)
- Android操作系统安全研究系列——键…
热门文章
- HDU - 5874 Friends and Enemies(思维)
- debian重启ssh服务_Jenkins远程部署Linux服务器
- vuedraggable自由拖拽html,vue中draggable拖拽列表的使用
- QT乱码总结8.编码测试和总结三
- BOOST内存管理(二) --- boost::pool
- SQLLite (四):sqlite3_prepare_v2,sqlite3_step
- 手把手教你玩转ARP包(一)
- 工具类用得好,下班下的早
- 曹大带我学 Go(7)—— 如何优雅地指定配置项
- Django模型(一)