#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
/*
输入描述:
有多组数据。 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。 接下来一行给出M个国家号。
输出描述:
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式 如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4. 每组数据后加一个空行。
*/
struct country{
float gold_medal;
float all_medal;
float population;
int seq;//额外多定义一个国家号,方便
};
bool cmp1(country c1,country c2){//第一种比较方式
return c1.gold_medal>c2.gold_medal;
}
bool cmp2(country c1,country c2){//第2种比较方式
return c1.all_medal>c2.all_medal;
}
bool cmp3(country c1,country c2){//第3种比较方式
return (c1.gold_medal/c1.population)>(c2.gold_medal/c2.population);
}
bool cmp4(country c1,country c2){//第4种比较方式
return (c1.all_medal/c1.population)>(c2.all_medal/c2.population);
}
bool isamongvec2(int x,vector<int> vec11){
for(int i=0;i<vec11.size();i++){
if(x == vec11[i]){
return true;
}
}
return false;
}
int main(){
int n,m;
while(cin>>n>>m) {
vector<country> vec(n);
vector<int> vec2(m);
for (int i = 0; i < n; i++) {//输入各个国家信息
cin>>vec[i].gold_medal>>vec[i].all_medal>>vec[i].population;
vec[i].seq=i;
}
for(int i=0;i<m;i++){//输入待排的国家号
cin>>vec2[i];
}
/*********************************************/
int a[4][n];
sort(vec.begin(),vec.end(),cmp1);//第一种排序方式
for(int i=0;i<n;i++){
if(i>0 &&(vec[i].gold_medal == vec[i-1].gold_medal)){//如果排名相同
a[0][vec[i].seq]=a[0][vec[i-1].seq];
}
else a[0][vec[i].seq]=i+1;//记录下排名
}
/*********************************************/
sort(vec.begin(),vec.end(),cmp2);//第二种排序方式
for(int i=0;i<n;i++){
if(i>0 &&(vec[i].all_medal == vec[i-1].all_medal)){//如果排名相同
a[1][vec[i].seq]=a[1][vec[i-1].seq];
}
else a[1][vec[i].seq]=i+1;//记录下排名
}
/*********************************************/
sort(vec.begin(),vec.end(),cmp3);//第三种排序方式
for(int i=0;i<n;i++){
if(i>0 && (vec[i].gold_medal/vec[i].population) == (vec[i-1].gold_medal/vec[i-1].population) ){//如果排名相同
a[2][vec[i].seq]=a[2][vec[i-1].seq];
}
else a[2][vec[i].seq]=i+1;//记录下排名
}
/*********************************************/
sort(vec.begin(),vec.end(),cmp4);//第四种排序方式
for(int i=0;i<n;i++){
if(i>0 && (vec[i].all_medal/vec[i].population)==(vec[i-1].all_medal/vec[i-1].population) ){//如果排名相同
a[3][vec[i].seq]=a[3][vec[i-1].seq];
}
else a[3][vec[i].seq]=i+1;//记录下排名
}
int best_rank,method;
for(int i=0;i<n;i++){
for(int j=0;j<4;j++){
if(j == 0){
best_rank=a[j][i];
method=j+1;
}
else{
if(a[j][i] < best_rank){
best_rank=a[j][i];
method=j+1;
}
}
}
if(isamongvec2(i,vec2) ){
cout<<best_rank<<":"<<method<<endl;
}
}
cout<<endl;
}
return 0;
}
感觉像是屎山。。。。



京公网安备 11010502036488号