相当于是模拟OJ评测,这里注意最后输出:
1.那些所有提交结果都是-1的(即均未通过编译器的),或者从没有一次提交过的用户,不需要输出。
2.提交结果为-1的题目,最后输出分数是0
3.某个题目从没有提交过的,输出'-'

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <string.h>
  5. #include <cmath>
  6. #include <queue>
  7. #define INF 0x3f3f3f3f
  8. using namespace std;
  9. const int maxn=+;
  10. int problem[];
  11.  
  12. struct User{
  13. int id;
  14. int score=;
  15. int problem[]={-,-,-,-,-,-};
  16. int submitted[]={,,,,,}; //标记题目是否有提交,没提交的对应的就要输出'-'
  17. int perfect=; //拿满分的题目个数
  18. int ranks=INF;
  19. int isShow=; //用于标记是否要输出,即用户只要有一题通过编译器,不管是否为0,设置为1.
  20. bool operator<(const User tmp)const{
  21. if(ranks==tmp.ranks){
  22. if(perfect==tmp.perfect){
  23. return id<tmp.id;
  24. }
  25. else{
  26. return perfect>tmp.perfect;
  27. }
  28. }
  29. else{
  30. return ranks<tmp.ranks;
  31. }
  32. }
  33. }user[maxn];
  34.  
  35. bool cmp1(User a, User b){
  36. return a.score>b.score;
  37. }
  38.  
  39. bool cmp2(User a,User b){
  40. if(a.ranks==b.ranks){
  41. if(a.perfect==b.perfect){
  42. return a.id<b.id;
  43. }
  44. else{
  45. return a.perfect>b.perfect;
  46. }
  47. }
  48. else{
  49. return a.ranks<b.ranks;
  50. }
  51. }
  52.  
  53. int main()
  54. {
  55. int N,K,M;
  56. int id,pid,score;
  57. scanf("%d %d %d",&N,&K,&M);
  58. for(int i=;i<=K;i++){
  59. scanf("%d",&problem[i]);
  60. }
  61. for(int i=;i<M;i++){
  62. scanf("%d %d %d",&id,&pid,&score);
  63. user[id].id=id;
  64. user[id].problem[pid]=max(user[id].problem[pid],score);
  65. user[id].submitted[pid]=;
  66. //if(score==problem[pid])
  67. // user[id].perfect++; //不能这里就统计拿满分的题目个数,因为可能存在多次提交
  68. if(score!=-)
  69. user[id].isShow=;
  70. }
  71. for(int i=;i<=N;i++){
  72. for(int j=;j<=K;j++){
  73. if(user[i].problem[j]!=-)
  74. user[i].score+=user[i].problem[j];
  75. if(user[i].problem[j]==problem[j])
  76. user[i].perfect++;
  77. }
  78. }
  79. sort(user+,user+N+,cmp1);
  80.  
  81. int cnt=;
  82. int lastid=;
  83. user[].ranks=cnt;
  84. user[].score=-;
  85. for(int i=;i<=N;i++){
  86. user[i].ranks=i;
  87. if(i!= && user[i].score==user[i-].score)
  88. user[i].ranks=user[i-].ranks;
  89. }
  90. sort(user+,user+N+,cmp2);
  91. for(int i=;i<=N;i++){
  92. if(user[i].isShow==)
  93. continue;
  94. printf("%d %05d %d",user[i].ranks,user[i].id,user[i].score);
  95. for(int j=;j<=K;j++){
  96. if(user[i].submitted[j]==){
  97. printf(" -");
  98. }
  99. else{
  100. if(user[i].problem[j]!=-)
  101. printf(" %d",user[i].problem[j]);
  102. else
  103. printf("");
  104. }
  105. }
  106. printf("\n");
  107. }
  108. return ;
  109. }

PAT甲题题解-1075. PAT Judge (25)-排序的更多相关文章

  1. PAT甲题题解-1129. Recommendation System (25)-排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789819.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  2. PAT甲题题解-1051. Pop Sequence (25)-堆栈

    将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstd ...

  3. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  4. PAT甲题题解-1101. Quick Sort (25)-大水题

    快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着 ...

  5. PAT甲题题解-1117. Eddington Number(25)-(大么个大水题~)

    如题,大水题...贴个代码完事,就这么任性~~ #include <iostream> #include <cstdio> #include <algorithm> ...

  6. PAT甲题题解-1130. Infix Expression (25)-中序遍历

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789828.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. PAT甲题题解-1016. Phone Bills (25)-模拟、排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789229.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. PAT甲题题解-1021. Deepest Root (25)-dfs+并查集

    dfs求最大层数并查集求连通个数 #include <iostream> #include <cstdio> #include <algorithm> #inclu ...

  9. PAT甲题题解-1024. Palindromic Number (25)-大数运算

    大数据加法给一个数num和最大迭代数k每次num=num+num的倒序,判断此时的num是否是回文数字,是则输出此时的数字和迭代次数如果k次结束还没找到回文数字,输出此时的数字和k 如果num一开始是 ...

随机推荐

  1. [luogu T71973]卡常者π酱

    [luogu T71973]卡常者π酱 题意 给定一个长度为 \(n\) 的字符串, 要求将字符串分割为若干段, 每一段要么是一个字符要么是前面几段的并的子串. 如果某一段是一个单独字符, 则产生 \ ...

  2. [ML学习笔记] 回归分析(Regression Analysis)

    [ML学习笔记] 回归分析(Regression Analysis) 回归分析:在一系列已知自变量与因变量之间相关关系的基础上,建立变量之间的回归方程,把回归方程作为算法模型,实现对新自变量得出因变量 ...

  3. [工具]StarUML

    前些日子整理文档,需要补充程序结构流程图,一直没有想到怎么样能够清晰直观描述清楚现在的解决方法,直到我知道了 UML 语言.最早对于 UML 的了解也只是停留在一本书上,他们开发使用 UML 分解任务 ...

  4. yield协程

    1.Generator Generator , 一种可以返回迭代器的生成器,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,当需要操作的时候,在通过迭代器的next重新 ...

  5. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

  6. vagrant特性——基于docker开发环境(docker和vagrant的结合)-1-基本使用

    Docker vagrant提供了使用Docker作为provider(其他的provider有virtualBox.VMware\hyper-V等)的开箱即用支持.这允许你的开发环境由Docker容 ...

  7. zabbix 客户端添加自定义参数

    0.zabbix客户端配置文件 server和serveractive都需要配置 1.配置自定义参数脚本文件 zabbix_agent.conf中UserParameter字段,可以配置多行 User ...

  8. WorldWind源码剖析系列:表面瓦片类SurfaceTile

    表面瓦片类SurfaceTile描述星球类(如地球)表面纹理影像的瓦片模型.其类图如下. 表面瓦片类SurfaceTile包含的主要的字段.属性和方法如下: int m_Level;//该瓦片所属金字 ...

  9. 织梦提交表单(提交留言)前的js校验

    第一种情况:页面有引入jq的 在form标签上加上id <form action="/plus/diy.php" enctype="multipart/form-d ...

  10. Python2.7-fileinput

    fileinput 模块,对输入的文件流进行迭代操作,可以说是对 open() 的一个扩展,它可以直接修改文件,也可以对他们进行备份 模块方法: fileinput.input([files[, in ...