A1075.PAT Judge

题意

输入k个程序的每个程序的满分分数,再输入m条用户提交的记录。按要求进行分数的排序最后输出。是一道结构体的复杂排序

思路分析

首先明确本题的输出要求:

  • 编译失败的提交分数为-1。
  • 只有至少成功提交过一次程序(没有编译失败),的用户才会被排序。可以通过在结构体中设置一个bool isshown标志实现,当输入的grade != -1时,则isshown设置为true。
  • 要求输出得失每条程序的最高的提交分数,可以边输入边更新该程序的最高分
  • 对于排序中的用户,如果编译失败,则该提交对应的程序分数为0,而没有提交的程序,即输出-
  • cmp按照总分从高到低排序,总分相等时按照完整解决程序个数排序,解决个数相等时,按照id从小到大。
    结构体的写法:按照所需输出的要求,结构体应写成如下形式
struct record{int user,id,ranked,num,total;      //user代表用户名,id代表题号,ranked排名,num代表得到满分的次数,tota总分int grade[6];       //各个程序的得分bool isshown = false;       //默认为false表示没有成功的提交 
}rec[maxn];

细节性太多,直接看代码吧。

参考代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4+10;
int a[6];       
struct record{int user,id,ranked,num,total;int grade[6];       //各科分数bool isshown = false;       //默认为false表示没有成功的提交 
}rec[maxn];
int n,k,m;bool cmp(const record &a,const record &b) {if(a.total != b.total) return a.total > b.total;else if(a.num != b.num) return a.num > b.num;else return a.user < b.user;
}int main(void) {int user,id,grade;cin>>n>>k>>m;for(int i = 1;i <= k;i++) scanf("%d",&a[i]);for(int i = 1;i <= n;i++) fill(rec[i].grade,rec[i].grade+6,-2);         //-2代表所有程序未提交 for(int i = 0;i < m;i++) {scanf("%05d %d %d",&user,&id,&grade);rec[user].user = user;              //注意此处的写法是rec[user]而不是rec[i]。 rec[user].grade[id] = max(rec[user].grade[id],grade);       //更新对应程序的最高分 if(grade != -1) rec[user].isshown = true;           //出现了分数不为-1,则设置标记 }//遍历所有的用户,获得总分数以及完整通过程序的个数numfor(int i = 1;i <= n;i++) {for(int j = 1;j <= k;j++) {if(rec[i].grade[j] != -1 && rec[i].grade[j] != -2)                  //提交了并且编译通过则加到总分中 rec[i].total += rec[i].grade[j];if(rec[i].grade[j] == a[j]) rec[i].num++;           //如果是满分,则完整通过个数+1 }}//获得排名 sort(rec+1,rec+1+n,cmp);rec[1].ranked = 1;for(int i = 2;i <= n;i++) {if(rec[i].total == rec[i-1].total) rec[i].ranked = rec[i-1].ranked;else rec[i].ranked = i;}for(int i = 1;i <= n;i++) {if(rec[i].isshown == true) {printf("%d %05d %d ",rec[i].ranked,rec[i].user,rec[i].total);for(int j = 1;j <= k;j++) {if(j > 1) cout<<" ";if(rec[i].grade[j] == -1) cout<<"0";else if(rec[i].grade[j] == -2) cout<<"-";else cout<<rec[i].grade[j];}cout<<endl;}}return 0;
}

转载于:https://www.cnblogs.com/Western-Trail/p/10362956.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 实现SSL握手协商

Android的私钥和信任证书的格式必须是BKS格式的&#xff0c;通过配置本地JDK&#xff0c;让keytool可以生成BKS格式的私钥和信任证书,java本身没有BouncyCastle密库 ssl通道建立前必须进行协商&#xff08;形成安全的通道--隧道技术&#xff09;。 服务端&#xff1a; View Co…

同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO

IO的方式通常分为几种&#xff0c;同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO 在JDK1.4出来之前&#xff0c;我们建立网络连接的时候采用BIO模式&#xff0c;需要先在服务端启动一个ServerSocket&#xff0c;然后在客户端启动Socket来对服务端进行通信&#x…

1 概述

Unix C TCP/IP 三位一体 Linux天生是网络操作系统 程序员的学习&#xff1a;不断地敲代码&#xff0c;不断地看别人的代码。 Linux两大领域&#xff1a; &#xff08;1&#xff09;服务器 &#xff08;2&#xff09;嵌入式设备 www.netcraft.com 查看网站服务器系统 VMware快…

对我影响最大的三位老师

读书也读了那么多年了&#xff0c;遇见了许多的老师&#xff0c;他们教不同的科目&#xff0c;各司其职&#xff0c;兢兢业业的做着自己的本职工作。在我的学生时代印象最深的有三位老师。第一位是我的初中语文老师邹老师&#xff0c;他上课非常有趣&#xff0c;语文课&#xf…

Java Annotation认知(包括框架图、详细介绍、示例说明)

摘要 Java Annotation是JDK5.0引入的一种注释机制。 网上很多关于Java Annotation的文章&#xff0c;看得人眼花缭乱。Java Annotation本来很简单的&#xff0c;结果说的人没说清楚&#xff1b;弄的看的人更加迷糊。 我按照自己的思路&#xff0c;对Annotation进行了整理。理解…

matlab练习程序(RGB2HSL、HSL2RGB)

色相饱和度亮度和三原色的相互转换 function mainimgimread(lena_color.jpg);imgmat2gray(img); %任意区间映射到[0,1];[m n dim]size(img);imshow(img);%%图像的RGBRimg(:,:,1);Gimg(:,:,2);Bimg(:,:,3);%%图像RGB2HSLHzeros(m,n); %色相角Szeros(m,n); %饱和度Lzeros(m,…

2 文件处理、权限管理、搜索

文件处理命令&#xff1a; ls -a -l -d -h -i mkdir -p parents cd . .. /tmp/Japan pwd rmdir cp -r -p source destination 可改名recursive preserve mv source destination 剪切文件 改名 ctrl l 清屏 或者 clear命令 rm -r -f touch 新建文件 带空格需加…

第38节: Vue3 鼠标按钮修改器

在UniApp中使用Vue3框架时&#xff0c;你可以使用按键修饰符来更精确地处理键盘事件。以下是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用.left、.right和.middle按键修饰符&#xff1a; <template> <view> <input keydown"handleKeyDown&…

Go语言学习之3 流程控制、函数

主要内容&#xff1a; 1. strings和strconv使用2. Go中的时间和日期类型3. 指针类型4. 流程控制5. 函数详解 1. strings和strconv使用 //strings 1. strings.HasPrefix(s string, prefix string) bool&#xff1a;判断字符串s是否以prefix开头 。 2. strings.HasSuffix(s strin…

RabbitMQ教程总结

【译】RabbitMQ教程一 主要通过Hello Word对RabbitMQ有初步认识 【译】RabbitMQ教程二 工作队列&#xff0c;即一个生产者对多个消费者循环分发、消息确认、消息持久、公平分发 【译】RabbitMQ教程三 如何同一个消息同时发给多个消费者开始引入RabbitMQ消息模型中的重要概念路由…

3 帮助命令、用户管理、压缩

帮助命令&#xff1a; man 命令或配置文件 获得帮助信息 /l 查看所有和l相关的行 q 退出 man passwd 1命令的帮助 5配置文件的帮助 man 1 passwd man 5 passwd 默认查看命令的帮助 man 5 passwd 查看配置文件的帮助 whatis 命令 查看命令的功能性描述 whatis ls ap…

[bzoj1039] [ZJOI2008]无序运动Movement

Description D博士对物理有着深入的研究&#xff0c;经典物理、天体物理、量子物理都有着以他的名字命名的定理。最近D博士着迷于研究粒子运动的无规则性。对圣经深信不疑的他相信&#xff0c;上帝创造的任何事物必然是有序的、有理可循的&#xff0c;而不是无规则的、混沌的。…

关于shiro session失效报错问题

最近做了一个项目&#xff0c;要用到shiro&#xff0c;做完之后发现有个异常经常发生org.apache.shiro.session.UnknownSessionException: There is no session with id &#xff0c;经过多天的研究&#xff0c;终于得以解决 登录的时候异常信息&#xff1a; [java] view plain…

4 网络、挂载、关机

网络命令: 给在线用户发信 write 用户名 编辑时&#xff0c;Ctrl退格键删除错误输入 CtrlD 保存输入信息 wall 给所有在线用户发信 ping命令 -c指定发送次数 ping -c 3 192.168.231.1 ifconfig 查看网卡信息 ifconfig eth1 192.168.231.100 临时设置IP地址 mail 用户名 …

#191 sea(动态规划)

假设已经求出了i个点j个桥的连通图数量f[i][j]&#xff0c;容易由此推出最终答案&#xff0c;套路地枚举1号点所在连通块大小即可。 假设已经求出了i个点的边双连通图数量h[i]&#xff0c;考虑由此推出f[i][j]。可以枚举其中一座桥将图划分成两个部分&#xff0c;固定1号点在其…

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下

linux下获取占用CPU资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a; ps aux|head -1;ps aux|grep -v PID|sort -rn -k 3|head linux下获取占用内存资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a; ps aux|head -1;ps aux|grep -v PID|s…

自定义注解与validation结合使用案例

案例1&#xff1a; [java] view plaincopy import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import…

5 Vim编辑器的使用

vi filename 命令模式 a i o 插入模式 后前 行 Esc键 回到命令模式 Shift&#xff1a; 编辑模式 set nu加行号 执行完命令后直接回到命令模式 :set nu 设置行号 :set nonu 取消行号 移动命令&#xff1a; gg 到第一行 G 到最后一行 nG 到第n行 :n到第n行 $ 移至行…

机器学习实战(笔记)------------KNN算法

1.KNN算法 KNN算法即K-临近算法&#xff0c;采用测量不同特征值之间的距离的方法进行分类。 以二维情况举例&#xff1a; 假设一条样本含有两个特征。将这两种特征进行数值化&#xff0c;我们就可以假设这两种特种分别为二维坐标系中的横轴和纵轴&#xff0c;将一个样本以点的形…

hive的安装配置

hive只需安装在一个节点上。 1、将安装包解压&#xff0c;cd入conf文件夹下&#xff0c;执行命令cp hive-default.xml hive-site.xml 2、更改hive-site.xml的配置项 </property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql:/…