排名

Problem Description
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 
每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的 
考生,并将他们的成绩按降序打印。 
 
Input
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N 
< 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一 
名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号 
(题目号由1到M)。 
当读入的考生人数为0时,输入结束,该场考试不予处理。 
 
Output
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高 
到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考 
号的升序输出。 
 
Sample Input
4 5 25
10 10 12 13 15
CS004 3 5 1 3
CS003 5 2 4 1 3 5
CS002 2 1 2
CS001 3 2 3 5
1 2 40
10 30
CS001 1 2
2 3 20
10 10 10
CS000000000000000001 0
CS000000000000000002 2 1 2
0
 
Sample Output
3
CS003 60
CS001 37
CS004 37
0
1
CS000000000000000002 20


       
       
       
       
Hint
Huge input, scanf is recommended.
 
 
Source
浙大计算机研究生复试上机考试-2005年

用到了map容器中key 和value 排序, 详细用法 可见  另一篇 stl中map容器的排序问题


#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>

using namespace std;

typedef pair<string, int> PAIR;

bool CmpDown(const PAIR &lhs, const PAIR &rhs){
    if(lhs.second == rhs.second){
        return lhs.first < rhs.first;
    }    //这里是关键,刚开始以为map中key会按字典排序排列好,就没有这样写,结果没有通过!!!
	return lhs.second > rhs.second;
}


int main(){
	int N, M, G;
	while (scanf("%d", &N)){
		if (N == 0)break;
		scanf("%d %d", &M, &G);
		vector<int> score;
		map<string, int> mp;
		char s[20];
		int m;
		if (N == 0) break;

		for (int i = 0; i < M; i++){
			int a;
			scanf("%d", &a);
			score.push_back(a);
		}
		while (N--){

			int sum = 0;
			int number;
			scanf("%s %d", &s, &m);

			while (m--){
				scanf("%d", &number);
				sum += score[number - 1];
			}
			
			if (sum >= G){
				mp.insert(pair<string, int>(s, sum));
			}
		}
        cout << mp.size() << endl;
		if(mp.size() != 0){
			vector<PAIR> vec(mp.begin(), mp.end());
			//cout << "vecsize " << endl;
			sort(vec.begin(), vec.end(), CmpDown);
			for (vector <PAIR>::iterator iter = vec.begin(); iter != vec.end(); iter++){
				cout << iter->first << " " << iter->second << endl;
			}
		}
	}
	return 0;
}








你可能感兴趣的:(排名)