PAT1012

传送门

这是一道结构体排序问题,只不过排序的条件有点特别,但是我们可以传一个谓词给函数。还有一个坑就是注意俩人排名相同的情况,比如有两人并列第一,实际上分数第二的人排名就是第三了。

/*    *********PAT1012*****************
      *********Author:markliang********
*/
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int N,M;
struct info{
	string name;
	pair score[4]; //save the A C M E score
	info(string name,pair p[]){
		this->name=name;
		for(int i=0;i<4;i++){ score[i].first=p[i].first;score[i].second=p[i].second; }
	}
};
void setRank(vector &v,int cond=0){
	int previous=-1;
	int nowRank=1;
	for(auto i=0;irhs.score[0].first;
}
bool compareClang(const info &lhs,const info& rhs){
	return lhs.score[1].first>rhs.score[1].first;
}
bool compareMath(const info &lhs,const info& rhs){
	return lhs.score[2].first>rhs.score[2].first;
}
bool compareEnglish(const info &lhs,const info& rhs){
	return lhs.score[3].first>rhs.score[3].first;
}
void print(vector &v,vector s){
	char table[5]={'A','C','M','E'};
	int ranking=0,index=-1;
	for(auto it : s){
		bool flag=false;
		for(auto k : v){
			if(it==k.name){
				flag=true;
				ranking=2147483647;
				for(int i=0;i<4;i++)
					if(k.score[i].second>N>>M;
	vector ranks;
	vector check;
	string name;
	pair p[4];

	for(int i=0;i>name>>p[1].first>>p[2].first>>p[3].first;
		p[0].first=(p[1].first+p[2].first+p[3].first)/3;
		ranks.push_back(info(name,p));
	}
	
	for(int i=0;i>name;
		check.push_back(name);
	}
	std::sort(ranks.begin(),ranks.end(),compareAver);
	setRank(ranks,0);	
	std::sort(ranks.begin(),ranks.end(),compareClang);
	setRank(ranks,1);
	std::sort(ranks.begin(),ranks.end(),compareMath);
	setRank(ranks,2);
	std::sort(ranks.begin(),ranks.end(),compareEnglish);
	setRank(ranks,3);	
	print(ranks,check);
	return 0;
}


你可能感兴趣的:(PAT)