文章目录

  • 题目分析
  • 题目链接

题目分析

一个区域排名和一个总排名。启发我们每个同学的数据存两份,一个存在区域数组中,另一个存在整体数组中。

有序列表中排名怎么求呢?
比如序列

得分:99 98 98 97 97 90
排名:1  2  2   4  5  6

思路如下:如果该数和它前面的数不一样,则它的排名就是它前面的数的个数+1,比如98分排名第2;如果该数和它前面的数相等,该数的排名和前面数的排名一致,比如98分排名第2.

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N =110;struct Student{string id;int grade;int location_number ,local_rank ,final_rank;bool operator <(const Student& a) const{  //重载小于号,可以理解成满足什么条件的人排到前面if(grade!=a.grade)  return grade>a.grade;  //成绩高的排在前面return id<a.id; //若成绩相等,则id小的排在前面}
};vector<Student> grades[N];//区域成绩,二维数组
vector<Student> all;//全国总成绩int main(){int n;cin>>n;for(int i=1;i<=n;i++){ //遍历每一个区域:编号从1到nint k;cin>>k; //区域人数while(k--){string id;int grade;cin>> id>>grade;grades[i].push_back({id, grade,i}); //区域i的学生压入}auto & g=grades[i]; //引用sort(g.begin(),g.end()); //区域排序for(int m=0;m<g.size();m++){ //区域排名if(!m || g[m].grade!=g[m-1].grade) //如果是第一个 或者是和前面的人成绩不一样g[m].local_rank=m+1;else g[m].local_rank = g[m-1].local_rank;all.push_back(g[m]); //区域排好名后压入全国数组中}}sort(all.begin(),all.end()); //全国排序for(int i=0;i<all.size();i++){ //全国排名if(!i || all[i].grade!=all[i-1].grade)all[i].final_rank=i+1;else all[i].final_rank=all[i-1].final_rank;}cout<<all.size()<<endl;for(auto& s:all)cout<<s.id<<" "<<s.final_rank<<" "<<s.location_number<<" "<<s.local_rank<<endl;
}

第二遍代码
没用引用,写起来使用二维数组。

#include<bits/stdc++.h>
using namespace std;
const int N = 110;struct Student{string id;int grade;int location_number;int final_rank,local_rank;bool operator<(const Student& t) const{if(grade != t.grade) return grade>t.grade;return id<t.id;}
};
vector<Student> q[N];
vector<Student> all; int main(){int n;cin>>n;for(int i=1;i<=n;i++){ //区域号iint k;cin>>k;while(k--){string id;int grade;cin>> id>>grade;q[i].push_back({id,grade,i});}sort(q[i].begin(),q[i].end()); //遍历区域内的每个学生for(int j=0;j<q[i].size();j++){if(!j || q[i][j].grade != q[i][j-1].grade) q[i][j].local_rank=j+1;else q[i][j].local_rank = q[i][j-1].local_rank;all.push_back(q[i][j]);}  }sort(all.begin(),all.end());cout<<all.size()<<endl;for(int i=0;i<all.size();i++){if(!i || all[i].grade != all[i-1].grade)all[i].final_rank=i+1;else all[i].final_rank=all[i-1].final_rank;}for(auto &c: all)cout<< c.id<<" "<<c.final_rank<<" "<<c.location_number<<" "<<c.local_rank<<endl;}

题目链接

PAT甲级1025 PAT Ranking

PAT甲级1025 PAT Ranking:[C++题解]排序、结构体、排名相关推荐

  1. PAT甲级1141 PAT Ranking of Institutions :[C++题解]结构体、排序、哈希表、结构体构造函数、结构体内写函数、排名

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:和下面这题是一道题: PAT甲级1137 Final Grading:[C++题解]结构体.排序.哈希表.结构体构造函数.结构体内写函 ...

  2. PAT甲级1075 PAT Judge:[C++题解]排序、结构体

    文章目录 题目分析 题目链接 题目分析 分析:主要问题在于判断是否出现过,如果出现过就不需要再初始化一个结构体,如果未出现过再初始化一个结构体. 当然还需要开一个hash表,用来映射学生id和结构体信 ...

  3. 蓝桥杯 成绩排序——结构体

    蓝桥杯 成绩排序--结构体 问题描述 给出n个学生的成绩,将这些学生按成绩排序, 排序规则,优先考虑数学成绩,高的在前:数学相同,英语高的在前:数学英语都相同,语文高的在前:三门都相同,学号小的在前 ...

  4. PAT甲级题目翻译+答案 AcWing(排序)

    1012 The Best Rank (25 分) 题意 :给ID和3门成绩,计算其平均分A,输出每位学生最好的排名,A>C>M>E 思路 :如果将所需的若干个元素中使第一个元素为后 ...

  5. PAT甲级1029 Median:[C++题解]贪心、二路归并

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 如果直接排序,时间复杂度是O(nlogn),n=2∗105O(nlogn),\ n=2*10^5O(nlogn), n=2∗105会 ...

  6. PAT甲级1070 Mooncake:[C++题解]贪心

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 对单件从高到低排序. 需要注意的是总需要量d设成double,不要设成int. ac代码 #include<bits/stdc ...

  7. PAT甲级1008 Elevator:[C++题解]模拟

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:统计上升次数.下降次数:停留次数就是n.然后算数即可. ac代码 #include<bits/stdc++.h> usin ...

  8. PAT甲级1077 Kuchiguse:[C++题解]字符串、最长公共后缀

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 读入n个字符串s[n],以s[0]为基础找公共后缀.枚举后缀的长度,内层循环遍历其他字符串,判断是否后缀相等. 使用子串的函数sub ...

  9. PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...

最新文章

  1. perl+cgi学习
  2. 链路追踪技术的应用及实践
  3. 深入浅出.NET泛型编程(1)
  4. 物联卡与sim卡有什么差别性的不同
  5. 小米路由器刷梅林教程_小米路由器3刷X-Wrt固件教程
  6. FTP搜索引擎开发文档前言部分
  7. 基于等离激元的空间微分
  8. wlacm 铲雪车snow 题解
  9. 51单片机--外部中断
  10. Jasperreport_6.18的吐血记录三之简易交叉表 + 页面预览和导出
  11. 想做自媒体,做什么样的内容呢,怎么做呢--第006期博文
  12. 计算机二级买那几本书,计算机二级公共基础知识买哪本书复习好?重点在哪..._公共英语考试_帮考网...
  13. 操作系统中文件存储空间的管理
  14. B端产品运营:学习笔记
  15. 集合之ArrayDeque
  16. 802.11 协议介绍
  17. 网易邮箱账号OAuth2.0认证文档
  18. 相控阵天线方位角俯仰角matlab画图,基于相控阵天线测试的波束指向角计算方法...
  19. 【python实战】top3 英尺转换为米
  20. Ubuntu桌面美化(unity-tweak-tool)

热门文章

  1. C# ArrayList集合
  2. Java知多少(完结篇)
  3. java执行时的两个常见问题(无法加载主类)
  4. Copy GAC DLL
  5. 用神经网络分类一维矩阵
  6. 9. 混合模型和EM(3)
  7. cms是什么意思啊_织梦CMS网站如何自动提交百度快速收录(详细教程)
  8. 【Paper】2017_The distributed optimal consensus algorithms for general linear multi-agent systems
  9. 【Python】调用百度云API人脸检测 Face Detect
  10. WiFi漫游了解一下?大户型wifi组网方案