题目1007:奥运排序问题
#include <stdio.h>
#include<algorithm>
using namespace std;
const int MAX=1000,INF=10000;
int id[MAX],ansT[MAX][4],ans[MAX],style[MAX];
struct E{
int gold; //金牌数
int medal; //奖牌数
int popu; //人口数
double goldRatio; //金牌人口比例
double medalRatio; //奖牌人口比例
}a[MAX],tmp[MAX]; // a[]--保存所有国家的输入信息; tmp[]--保存需要排序的国家信息
int main()
{
int n,m,i,j,cnt;
//freopen("G:\\in.txt", "r", stdin);
while(scanf("%d%d",&n,&m)!=EOF){
for(i=0;i<n;i++){
scanf("%d%d%d",&a[i].gold,&a[i].medal,&a[i].popu);
a[i].goldRatio=(double)a[i].gold/a[i].popu; //先转换成double型再运算
a[i].medalRatio=(double)a[i].medal/a[i].popu;
}
for(i=0;i<m;i++){
scanf("%d",&id[i]); //输入需要排序的下标,国家做下标 从0-->n-1
}
for(i=0;i<m;i++){
tmp[i]=a[id[i]];
}
//--------------下面进行查找-------------
for(i=0;i<m;i++){ //依次查找第0个,第1个...第m-1个 需要排序的国家
cnt=1;
for(j=0;j<m;j++){
if(tmp[j].gold>a[id[i]].gold)
cnt++;
}
ansT[i][0]=cnt;
}
for(i=0;i<m;i++){ //依次查找第0个,第1个...第m-1个 需要排序的国家
cnt=1;
for(j=0;j<m;j++){
if(tmp[j].medal>a[id[i]].medal)
cnt++;
}
ansT[i][1]=cnt;
}
for(i=0;i<m;i++){ //依次查找第0个,第1个...第m-1个 需要排序的国家
cnt=1;
for(j=0;j<m;j++){
if(tmp[j].goldRatio>a[id[i]].goldRatio)
cnt++;
}
ansT[i][2]=cnt;
}
for(i=0;i<m;i++){ //依次查找第0个,第1个...第m-1个 需要排序的国家
cnt=1;
for(j=0;j<m;j++){
if(tmp[j].medalRatio>a[id[i]].medalRatio)
cnt++;
}
ansT[i][3]=cnt;
}
for(i=0;i<m;i++){
int tmp=INF;
for(j=0;j<4;j++){
if(ansT[i][j]<tmp){
tmp=ansT[i][j];
style[i]=j+1;
ans[i]=tmp;
}
}
}
for(i=0;i<m;i++)
printf("%d:%d\n",ans[i],style[i]);
printf("\n");
}
return 0;
}