题目1007:奥运排序问题
#include <stdio.h>
#include <iostream>
#include <stack>
#include <string.h>
#include <queue>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <string>
using namespace std;
typedef long long LL;
struct Country
{
int GoldNum;//金牌数
int MedalNum;//奖牌数
int PeopleNum;//人口数
double GoldRatio;//金牌比例
double MedalRatio;//奖牌比例
int SKind;//最佳排名类型
int BestRank;//最佳排名
int Rank;//当前排名
};
Country country[1000];
int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N, M, i, j, ID;
Country countrySort[1001];
while(scanf("%d %d", &N, &M) != EOF) {
//给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
for(int i = 0; i < N; i++){
scanf("%d %d %d",&country[i].GoldNum,&country[i].MedalNum,&country[i].PeopleNum);
country[i].GoldRatio = country[i].GoldNum * 1.0 / country[i].PeopleNum;
country[i].MedalRatio = country[i].MedalNum * 1.0 / country[i].PeopleNum;
}
//给出要排序的M个国家号。
for(i = 0;i < M;i++){
scanf("%d",&ID);
countrySort[i] = country[ID];
}
//分别按四种排序方式 进行排序 比较其最适合的
for(i = 0;i < M;i++){
//金牌数排序
countrySort[i].Rank = 1;
for(j = 0;j < M;j++){
if(countrySort[i].GoldNum < countrySort[j].GoldNum){
countrySort[i].Rank++;
}
}
countrySort[i].BestRank = countrySort[i].Rank;
//printf("J:%d\n",countrySort[i].BestRank);
countrySort[i].SKind = 1;
//奖牌数排序
countrySort[i].Rank = 1;
for(j = 0;j < N;j++){
if(countrySort[i].MedalNum < countrySort[j].MedalNum){
countrySort[i].Rank++;
}
}
if(countrySort[i].Rank < countrySort[i].BestRank){
countrySort[i].BestRank = countrySort[i].Rank;
countrySort[i].SKind = 2;
}
//printf("J2:%d\n",countrySort[i].Rank);
//金牌人口比例排序
countrySort[i].Rank = 1;
for(j = 0;j < N;j++){
if(countrySort[i].GoldRatio < countrySort[j].GoldRatio){
countrySort[i].Rank++;
}
}
if(countrySort[i].Rank < countrySort[i].BestRank){
countrySort[i].BestRank = countrySort[i].Rank;
countrySort[i].SKind = 3;
}
//printf("J3:%d\n",countrySort[i].Rank);
//奖牌人口比例排序
countrySort[i].Rank = 1;
for(j = 0;j < N;j++){
if(countrySort[i].MedalRatio < countrySort[j].MedalRatio){
countrySort[i].Rank++;
}
}
if(countrySort[i].Rank < countrySort[i].BestRank){
countrySort[i].BestRank = countrySort[i].Rank;
countrySort[i].SKind = 4;
}
//printf("J4:%d\n",countrySort[i].Rank);
//输出
printf("%d:%d\n",countrySort[i].BestRank,countrySort[i].SKind);
}
//每组数据后加一个空行。
printf("\n");
}//while
return 0;
}
/**************************************************************
Problem: 1007
User: Crazy_man
Language: C++
Result: Accepted
Time:0 ms
Memory:1564 kb
****************************************************************/