坑爹,考浙大的研究生果然都不是一般人……
#include "stdio.h"
#include "string.h"
#define M 100
int best[M];
int final[M];
int n, m;
int data[M][3];
int state[M];
void refresh(int* ini, int w){
int i;
for(i=0; i<n; i++)
if(final[i] > ini[i]){
final[i] = ini[i];
best[i] = w;
}
}
void order(double* seq, int w){
int i, j;
double t;
int tt;
int oo[M], ini[M];
for(i=0; i<m; i++)
oo[i] = state[i]; //初始化,oo与seq对应,oo[i]号国家的成绩是seq[i]
for(i=1; i<m; i++){
t = seq[i];
tt = oo[i];
for(j=i-1; j>=0; j--){
if(seq[j] < t){
seq[j+1] = seq[j];
oo[j+1] = oo[j]; //oo数组随着seq排序改变,始终与成绩的位置对应
}else
break;
}
seq[j+1] = t;
oo[j+1] = tt;
}
for(i=0; i<m; i++){
if(i>=1 && seq[i] ==seq[i-1])
ini[oo[i]] = ini[oo[i-1]]; //颠倒。oo[i] = k 表示第i名的国家是k,反转后为 ini[k] = i 表示k国家是第i名
else
ini[oo[i]] = i;
}
refresh(ini, w);
}
void main(){
int i;
double seq[M];
freopen("in.txt", "r", stdin);
while(scanf("%d %d", &n, &m)!=EOF){
for(i=0; i<n; i++){
scanf("%d %d %d", &data[i][0], &data[i][1], &data[i][2]);
}
for(i=0; i<m; i++)
scanf("%d", state+i);
memset(final, 0x7F, sizeof(final));
for(i=0; i<m; i++) seq[i] = data[state[i]][0];
order(seq, 1);
for(i=0; i<m; i++) seq[i] = data[state[i]][1];
order(seq, 2);
for(i=0; i<m; i++) seq[i] = (data[state[i]][0]*1.0)/data[state[i]][2];
order(seq, 3);
for(i=0; i<m; i++) seq[i] = (data[state[i]][1]*1.0)/data[state[i]][2];
order(seq, 4);
for(i=0; i<m; i++){
printf("%d:%d\n", final[state[i]]+1, best[state[i]]);
}
printf("\n");
}
}
只将给定国家号的国家排序