PAT 甲级 1025 PAT Ranking (25分)

原题链接1025 PAT Ranking (25分)

题目大意:

需要计算考生在地区中的排名,在所有考生中的排名。
每读入一个地区的考生的信息,就进行排名,每一个考场内的排名计算完毕后再计算总排名。

分析:

1.重载cmp写法:函数名中写小于号
2.push_back的时候注意数据类型一致
3.做排名类题目时,用这个方法 rank = i + 1

满分代码:

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#define inf 0x3f3f3f3f
typedef long long LL;
using namespace std;
const int MAXN = 110;
/*
	题目分析:
	1.重载cmp写法:函数名中写小于号
	2.push_back的时候注意数据类型一致 
	3.做排名类题目时,用这个方法 rank = i + 1 
*/
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;
	}
};
// MAXN组的本地排名 
vector<Student> loc[MAXN];
// 一个总的排名 
vector<Student> all;
int main() {
	int n, k;
	cin >> n;
	for(int i = 1; i <= n; i++) {
		int k;
		cin >> k;
		for(int j = 0; j < k; j++) {
			string id;
			int grade;
			cin >> id >> grade;
			// grade中存入:id, grade, location_number 注意数据类型一致 
			loc[i].push_back({id, grade, i});
		}
		// auto带引用符 能够提高效率 
		auto& local = loc[i];
		// 本地排序 为本地排名赋值 
		sort(local.begin(), local.end());
		for(int i = 0; i < local.size(); i++) {
			if(!i || local[i].grade != local[i-1].grade) {
				local[i].local_rank = i+1;
			} else {
				local[i].local_rank = local[i-1].local_rank;
			}
			all.push_back(local[i]);
		}
	}
	// 总排序 为总排名赋值 
	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;
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值