1012. The Best Rank 解析

注意排名的顺序。有并列的同名次。然后下一名要跳位。 比如 88 88 99 70 的排名应该为 2 2 1 4注意这点应该就能AC了

这个代码敲得好乱。。。。

更新了 代码 看着清爽多了

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <climits>
#include <cstring>
#include <map>
#include <stack>
#include <set>

#define MAX 2010

using namespace std;

struct node{
	string id;
	int g[4];
	int rank,subject;
	node(){rank = MAX;subject =-1;};
};
node list[MAX];
int r[MAX];//排序用
map <string,int> str2int;
char subject[4] = {'A','C','M','E'};


int p = 0;//指向哪一科
bool cmp(int a ,int b){
	return list[a].g[p] > list[b].g[p];
}

int n,k;

int main(){

	cin >> n >> k;
	for(int i = 1 ;i <= n ;i++){
		cin >> list[i].id >> list[i].g[1] >> list[i].g[2] >> list[i].g[3];
		list[i].g[0] = list[i].g[1] + list[i].g[2] + list[i].g[3];
		r[i] = i;//初始化排序序列
		str2int[list[i].id] = i;
	}

	for(int i = 0 ;i < 4 ;i++){
		p = i;
		sort(&r[1],&r[1]+n,cmp);
		int nowR = 1;
		int preG = list[r[1]].g[p];
		for(int j = 1 ; j <=n ;j++){
			int nowP = r[j];
			if(preG == list[nowP].g[p]){
				if(list[nowP].rank > nowR){
					list[nowP].rank = nowR;
					list[nowP].subject = p;
				}
			}
			else{
				nowR = j;
				preG = list[nowP].g[p];
				if(list[nowP].rank > nowR){
					list[nowP].rank = nowR;
					list[nowP].subject = p;
				}
			}
		}
	}

	string check;
	for(int i = 0; i < k;i++){
		cin >> check;
		int nowP = str2int[check];
		if(nowP == 0)
			cout << "N/A" << endl;
		else
			cout << list[nowP].rank << " " <<  subject[list[nowP].subject] << endl;
	}
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值