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 ...
随机推荐
- 《图解HTTP》笔记2
1.SSL(Secure Socket Layer,安全套接层) 1)SSL的作用 通信加密 确定通信方 SSL 提供认证和加密处理及摘要功能 HTTP 协议中没有加密机制,但可以通过和 SSL(Se ...
- 分享一波目前写的最强的autohotkey 插件
支持各种软件快速切换,补全括号,代码等!!!!!!!! ;这种全局定义要写在所有代码的前面才能让所有代码起作用. SetCapsLockState , AlwaysOff SetNumlockStat ...
- Linux如何杀掉tty终端
今天工作中遇到了同事的终端登陆不上去的问题,尝试着如何解决,首先想到的就是先干掉tty终端. 下面是总结的如何杀掉tty终端: 1.使用w命令查看当前登陆的用户及使用的tty [root@host ~ ...
- python2.7 psycopg2
psycopg2 安装 sql='''INSERT INTO "CNYB"."PRE_DQ_PLANT"("ID", "ORG_I ...
- Miller-Rabin素性测试
有时候我们想快速的知道一个数是不是素数,而这个数又特别的大导致 $O(\sqrt n)$ 的算法也难以通过,这时候我们可以对其进行 Miller-Rabin 素数测试,可以很大概率测出其是否为素数. ...
- Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...
- .Net Core: 跨域Cros概要
读取配置 public class AppConfig { public static IConfigurationRoot Configuration { get; set; } public st ...
- JavaScript有趣的知识点
JavaScript中总有一些有趣的小知识,而且又是很容易犯错的.我把我遇到的慢慢罗列一下,方便大家避坑 typeof(null)返回的结果是 object " "变成布尔类型为t ...
- P2993 [FJOI2014]最短路径树问题
思路:最短路+点分治 提交:2次 错因:更新桶的时候没有重置,而直接加上了. 题解: 对于构建最短路树,我们可以先跑最短路,然后dfs一遍连边. 然后就是点分治了,还是一些桶,存点数为\(x\)的最长 ...
- SSH远程连接排错的过程
SSH远程连接排错的过程 http://note.youdao.com/noteshare?id=bc81e9036cd2067cb1857ca9f54299a7 补充 ping命令用来测试主机之间网 ...