1025. PAT Ranking (25)
来源:互联网 发布:网络机柜布线 编辑:程序博客网 时间:2024/06/06 02:19
题目链接:https://www.patest.cn/contests/pat-a-practise/1025
题目大意:给定N组学生,将N组学生按成绩分别进行组内排序和整体排序,输出每个学生的整体名次,组别,组内名次
解题思路:
- 注意处理分数相同的名次相同
代码如下:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct P{ long long id; int grade,group,frank,lrank;};bool cmp1(P p1,P p2){//按分数递减排序,同分的按学号递增 if(p1.grade==p2.grade) return p1.id<p2.id; else return p1.grade>p2.grade;}int main(int argc, char const *argv[]){ int n,k,cnt=0,cur=0; cin>>n; P st[30010]; for(int i=0;i<n;i++){ cin>>k; for(int j=0;j<k;j++){ scanf("%013lld %d",&st[cnt].id,&st[cnt].grade); st[cnt].group=i+1;//组别 cnt++; } sort(st+cur,st+cur+k,cmp1);//cur为当前这一组的第一个人的下标 st[cur].lrank=1; for(int j=1;j<k;j++){/*处理本组的组内的排名*/ if(st[cur+j].grade==st[cur+j-1].grade) st[cur+j].lrank=st[cur+j-1].lrank; else st[cur+j].lrank=j+1; } cur+=k; } sort(st,st+cnt,cmp1); st[0].frank=1; for(int i=1;i<cnt;i++){/*处理最终的排名*/ if(st[i].grade==st[i-1].grade) st[i].frank=st[i-1].frank; else st[i].frank=i+1; } cout<<cnt<<endl; for(int i=0;i<cnt;i++) printf("%013lld %d %d %d\n",st[i].id,st[i].frank,st[i].group,st[i].lrank); return 0;}
阅读全文
0 0
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- 1025. PAT Ranking (25)
- zookeeper笔记
- Eclipse 代码移植到AS之后
- JAVA中的四种JSON解析方式详解
- android 修改Toolbar 返回按钮的颜色以及自定义的图片
- 2017多校3 1011 RXD's date
- 1025. PAT Ranking (25)
- sublime使用不完全介绍视频教程
- Zabbix3.2监控charts图形自动发送邮件
- java用HttpURLConnection类获取servlet连接
- python中os模块中文帮助--收藏,以后学习
- ASP.NET – Web 页面
- Android 删除多个activity的类,进入多个activity
- ZZULIOJ【1088】手机短号【输入输出格式】
- php 支付宝App支付服务端操作