1075 PAT Judge
1. 这一题一开始,为了同一个人的数据更新得方便,我把id从字符串转化成整数,作为数组下标,但是注意了,每个学生还是要有字符串的id属性(根据下标得到),因为后面一旦排序,数组下标就毫无意义了。
2.由于这里的很多下标都是从1开始,所以一定要注意循环的开始是1,结束要用小于等于符号
3.有一个一开始理解错的小点是,当一个人提交了但是编译没通过,该题输出的应该是0分而不是-
4.我把结构体中每道题的得分初始化为-2,是为了方便最后判断考生该题有没有提交
AC代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;const int maxn = 100010;
const double eps = 1e-3;struct tester{char id[6];int s[6] = {-2,-2,-2,-2,-2,-2};int s_total = 0;int fullMark_n[6] = {0};int f_total = 0;bool ifPrint = false;int rank = 0;
}testers[10010];bool cmp(tester a,tester b){if(a.s_total!=b.s_total)return a.s_total>b.s_total;else if(a.f_total!=b.f_total)return a.f_total>b.f_total;else return strcmp(a.id,b.id)<0;
}int main(){int testers_n = 0;//<=10^4int probs_n = 0;//<=5int subms_n = 0;//<=10^5int s[6] = {0};//每道题的分值scanf("%d %d %d",&testers_n,&probs_n,&subms_n);for(int i=1;i<=probs_n;i++){scanf("%d",&s[i]);}char idStr[6];//读到的idint id;//id转化为整数 int proNo;//读到的问题序号int score;//读到的得分 for(int i=1;i<=subms_n;i++){scanf("%s %d %d",idStr,&proNo,&score);sscanf(idStr,"%d",&id);//首先判断能否打印if(score>-1){testers[id].ifPrint = true;//再判断是否大于当前该生该题得分if(score>testers[id].s[proNo])testers[id].s[proNo] = score;//再判断该生该题得分是否为满分if(score==s[proNo])testers[id].fullMark_n[proNo] = 1;}else{//再判断是否大于当前该生该题得分if(score>testers[id].s[proNo])testers[id].s[proNo] = 0;//既然提交了就算编译没通过也是0而不是- }}for(int i=1;i<=testers_n;i++){//算出每个学生的总分for(int j=1;j<=probs_n;j++){if(testers[i].s[j]!=-2){testers[i].s_total += testers[i].s[j];}}//算出每个学生满分的题数for(int j=1;j<=probs_n;j++){testers[i].f_total += testers[i].fullMark_n[j];}//将数组下标赋予给每个tester作为id,因为数组下标排序后就不起作用sprintf(testers[i].id,"%05d",i); }sort(testers+1,testers+testers_n+1,cmp);testers[1].rank = 1;for(int i=2;i<=testers_n;i++){if(testers[i].ifPrint){if(testers[i].s_total==testers[i-1].s_total){testers[i].rank = testers[i-1].rank;}else{testers[i].rank = i;}}}for(int i=1;i<=testers_n;i++){if(testers[i].ifPrint){printf("%d %s %d",testers[i].rank,testers[i].id,testers[i].s_total);for(int j=1;j<=probs_n;j++){if(testers[i].s[j]!=-2)printf(" %d",testers[i].s[j]);else printf(" -",testers[i].s[j]);}printf("\n");}}}
1075 PAT Judge相关推荐
- PAT甲级1075 PAT Judge:[C++题解]排序、结构体
文章目录 题目分析 题目链接 题目分析 分析:主要问题在于判断是否出现过,如果出现过就不需要再初始化一个结构体,如果未出现过再初始化一个结构体. 当然还需要开一个hash表,用来映射学生id和结构体信 ...
- 1075 PAT Judge 测试点四
测试点四试了很多次 是因为排序问题,把不能输出的和可以输出的记录一起排序,这里修改一下排序算法就ok了 参考了知乎的文章[PAT A1075]PAT Judge(详细解决测试点4!) - 知乎 (zh ...
- 1075 PAT Judge (25 分)【难度: 一般 / 知识点: 多关键字排序】
https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032 就是排序,注意一些细节即可. #includ ...
- A1075.PAT Judge
题意 输入k个程序的每个程序的满分分数,再输入m条用户提交的记录.按要求进行分数的排序最后输出.是一道结构体的复杂排序 思路分析 首先明确本题的输出要求: 编译失败的提交分数为-1. 只有至少成功提交 ...
- PAT甲级题目翻译+答案 AcWing(排序)
1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...
- PAT (Advanced Level) Practice 题解代码 - II (1051-1100)
PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...
- 刷PAT甲级的各题思路、细节以及遇到的问题记录
1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...
- PAT题型分类 记录汇总
这篇博客记录了我在跟着<算法笔记>以及习题册<算法笔记 上机实践指南>刷了PAT的题目之后的一些解题方法的总结与心得. 第三章 入门模拟 1. 简单模拟 一般解题思路 这一小节 ...
- 【PAT甲级真题整理三】1061~1090
目录 1061 Dating(20)字符串处理 1062 Talent and Virtue(25)排序 1063 Set Similarity(25)set的使用 1064 Complete Bin ...
最新文章
- 【深度学习入门到精通系列】卷积和池化计算详解
- Python编程基础:第四节 类型转换Type Cast
- Tomcat虚拟目录
- H5页面在iOS网页数字颜色自动被改变成蓝色
- Opencv笔记(十三)——图像的梯度
- java for 面试题_Java面试题整理
- 大数据时代:数据质量逐渐成关注焦点
- nginx关闭favicon.ico 日志记录
- postfix和dovecot架设邮件服务器的一些记录1
- kafka+多线程实现案例+Callable
- 北大青鸟软件工程师 ACCP6.0课程体系
- word表格转图片线条不会缺失方法
- 城建税和教育费附加怎么计算
- Newton冷却定理微分数学公式推导
- ctf比赛/学习资源整理,记得收藏!
- 2017南京大学计算机考研复试分,2018.的南大复试考生,:2017南京大学中国古代史考研复试经...
- /usr/bin/ld: cannot find -lxxx的错误
- 计算机用户名adm,adm那个电脑设置密码忘记了怎么处理
- javaFX学习之Menu下创建子菜单及菜单项的例子
- 【Mysql学习之旅-2】经典sql面试题及答案分析