PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)
题意:
给定一次PAT测试的成绩,要求输出考生的编号,总排名,考场编号以及考场排名。
分析:
题意很简单嘛,一开始上来就,一组组输入,一组组排序并记录组内排名,然后再来个总排序并算总排名,结果发现最后一个测试点超时。
发现自己一开始太傻太盲目,其实只要一次性全部输进来,记录好考场编号,一次排序就可以了。既然只排了一次,怎么计算考场排名呢,这里我用了三个数组
int g_rank[];//记录各个考场当前排到的名次 (当前最后一个人的名次)
int g_score[];//记录个考场当前排到的最后一个人的分数
int g_num[];//记录个考场当前已经排好队的人数
帮助计算考场排名
//计算分组排名
int p=a[i].num;//他属于第p组
if(g_rank[p]==){//如果他是本小组第一名
a[i].rank=;
g_rank[p]=;//当前组排到了第几名
g_score[p]=a[i].score;//本小组目前排下来最后一名的分数
g_num[p]=;//当前组排到了第几个人
}else{
g_num[p]++;//更新人数
if(g_score[p]==a[i].score) {//如果此人与本组的上一人的分数相同
a[i].rank=g_rank[p];//就是本小组上一名的名次
}else{//不同的话
a[i].rank=g_num[p];//那么他的名次是本组的人数
g_rank[p]=g_num[p];//更新当前本组最后一人名次
g_score[p]=a[i].score;//更新分数
}
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int score;
int num;
int rank;
int frank;
}a[];
bool cmp(node x,node y){
if(x.score==y.score){
return x.name<y.name;
}else{
return x.score>y.score;
}
}
int g_rank[];//记录各个考场当前排到的名次 (当前最后一个人的名次)
int g_score[];//记录个考场当前排到的最后一个人的分数
int g_num[];//记录个考场当前已经排好队的人数
int main(){
int n,k;
cin>>n;
int r=;
for(int i=;i<=n;i++){
cin>>k;
for(int j=;j<=k;j++){
cin>>a[r].name>>a[r].score;
a[r].num=i;//考场编号
r++;
}
}
sort(a+,a+r,cmp);
cout<<r-<<endl;
memset(g_rank,,sizeof(g_rank));
for(int i=;i<r;i++){
//全部排名
if(i==){
a[i].frank=;
}else{
if(a[i].score==a[i-].score){
a[i].frank=a[i-].frank;
}else{
a[i].frank=i;
}
}
//计算分组排名
int p=a[i].num;//他属于第p组
if(g_rank[p]==){//如果他是本小组第一名
a[i].rank=;
g_rank[p]=;//当前组排到了第几名
g_score[p]=a[i].score;//本小组目前排下来最后一名的分数
g_num[p]=;//当前组排到了第几个人
}else{
g_num[p]++;//更新人数
if(g_score[p]==a[i].score) {//如果此人与本组的上一人的分数相同
a[i].rank=g_rank[p];//就是本小组上一名的名次
}else{//不同的话
a[i].rank=g_num[p];//那么他的名次是本组的人数
g_rank[p]=g_num[p];//更新当前本组最后一人名次
g_score[p]=a[i].score;//更新分数
}
}
}
for(int i=;i<r;i++){
cout<<a[i].name<<" "<<a[i].frank<<" "<<a[i].num<<" "<<a[i].rank<<endl;
}
return ;
}
PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)的更多相关文章
- PAT 甲级 1028. List Sorting (25) 【结构体排序】
题目链接 https://www.patest.cn/contests/pat-a-practise/1028 思路 就按照 它的三种方式 设计 comp 函数 然后快排就好了 但是 如果用 c++ ...
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
题目链接 https://www.patest.cn/contests/pat-b-practise/1085 思路 结构体排序 要注意几个点 它的加权总分 是 取其整数部分 也就是 要 向下取整 然 ...
- PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)
1016 Phone Bills (25 分) A long-distance telephone company charges its customers by the following r ...
- PAT 甲级 1025 PAT Ranking
1025. PAT Ranking (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programmi ...
- PAT甲级——1025 PAT Ranking
1025 PAT Ranking Programming Ability Test (PAT) is organized by the College of Computer Science and ...
- 【PAT甲级】1070 Mooncake (25 分)(贪心水中水)
题意: 输入两个正整数N和M(存疑M是否为整数,N<=1000,M<=500)表示月饼的种数和市场对于月饼的最大需求,接着输入N个正整数表示某种月饼的库存,再输入N个正数表示某种月饼库存全 ...
- PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习
1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive intege ...
- PAT 甲级 1146 Topological Order (25 分)(拓扑较简单,保存入度数和出度的节点即可)
1146 Topological Order (25 分) This is a problem given in the Graduate Entrance Exam in 2018: Which ...
- PAT 甲级 1071 Speech Patterns (25 分)(map)
1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For ex ...
随机推荐
- linux /etc/shadow文件详解
struct spwd { char *sp_namp; /* user login name */ char *sp_pwdp; /* encrypted password */ long int ...
- L1与L2正则化
目录 过拟合 结构风险最小化原理 正则化 L2正则化 L1正则化 L1与L2正则化 参考链接 过拟合 机器学习中,如果参数过多.模型过于复杂,容易造成过拟合. 结构风险最小化原理 在经验风险最小化(训 ...
- 部署logstash节点
.部署Logstash节点 1.查看系统环境: [root@Logstash ~]# hostname Logstash [root@Logstash ~]# cat /etc/redhat-rele ...
- python 杂记 网络
参考资料:https://www.cnblogs.com/gareth-yu/p/9097943.htmlimport selectors import socket sel = selectors. ...
- browsersync简单使用和原理分析
1. 静态文件模式 browser-sync start --server --files "css/*.css" "*.html" 2. 代理模式 brows ...
- VS 运行库MT、MD的区别
https://www.jianshu.com/p/f43afc1d5946 VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT).多线程调试(/MTd).多线程 ...
- 使用IntelliJ IDEA配置Tomcat
一.下载Tomcat 1.进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本. 此处我们选择下载最新版本Tomcat 9. 注意有zip和exe ...
- MVC路由规则进一步了解
本周由于工作需要,接触了PetaPoco(一个小型的ORM-框架)和ExtJS,这个项目框架是别人写好的,用的是MVC,我写的MVC程序一般控制器和视图都是在一个类库下面的,但是作者是把MVC中的控制 ...
- 评估类模型之优劣解距离法Topsis模型
定义: TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距. 层次分析法的局限性: 问题和解决方案: 所以最终评分公式为: 指标正向化,得到正向 ...
- border-style
border-style 语法: border-style:<line-style>{1,4} <line-style> = none | hidden | dotted | ...