没想到浙大会出来这么不严谨的题,数据量是多少都没给,遇到这种情况给个十万应付一下就好了。
整体思路没什么问题,就是对输入的数据中拿出部分分别对他们排序,然后再遍历找出名次,不要怕麻烦就好。1A。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
#include <cmath>
#include <climits>
using namespace std;
const int MAXN = 100005;
const int INF = INT_MAX;
struct Guojia{
int goldnum;
int medalnum;
int peoplenum;
double goldpro;
double medalpro;
};
Guojia guojia[MAXN], current[MAXN], example[MAXN], ans1[MAXN], ans2[MAXN], ans3[MAXN], ans4[MAXN];
bool cmp1(Guojia x, Guojia y){
return x.goldnum > y.goldnum;
}
bool cmp2(Guojia x, Guojia y){
return x.medalnum > y.medalnum;
}
bool cmp3(Guojia x, Guojia y){
return x.goldpro > y.goldpro;
}
bool cmp4(Guojia x, Guojia y){
return x.medalpro > y.medalpro;
}
int main(){
// freopen("in.txt", "r", stdin);
int N, M, pos;
while(~scanf("%d %d", &N, &M)){
if(N == 0) break;
for(int i = 0; i < N; i++){
scanf("%d %d %d", &guojia[i].goldnum, &guojia[i].medalnum, &guojia[i].peoplenum);
guojia[i].goldpro = (double)guojia[i].goldnum/(double)guojia[i].peoplenum;
guojia[i].medalpro = (double)guojia[i].medalnum/(double)guojia[i].peoplenum;
}
for(int i = 0; i < M; i++){
scanf("%d", &pos);
current[i] = guojia[pos];
example[i] = guojia[pos];
}
//各种方式排序
sort(current, current+M, cmp1);
for(int i = 0; i < M; i++){
ans1[i] = current[i];
}
sort(current, current+M, cmp2);
for(int i = 0; i < M; i++){
ans2[i] = current[i];
}
sort(current, current+M, cmp3);
for(int i = 0; i < M; i++){
ans3[i] = current[i];
}
sort(current, current+M, cmp4);
for(int i = 0; i < M; i++){
ans4[i] = current[i];
}
//找最佳排名
for(int i = 0; i < M; i++){
for(int j = 0; j < M; j++){
if(example[i].goldnum == ans1[j].goldnum){
printf("%d:1\n", j+1);
break;
}
else if(example[i].medalnum == ans2[j].medalnum){
printf("%d:2\n", j+1);
break;
}
else if(example[i].goldpro == ans3[j].goldpro){
printf("%d:3\n", j+1);
break;
}
else if(example[i].medalpro == ans4[j].medalpro){
printf("%d:4\n", j+1);
break;
}
}
}
printf("\n");
// for(int i = 0; i < N; i++){
// printf("%d %d %d %lf %lf\n", guojia[i].goldnum, guojia[i].medalnum, guojia[i].peoplenum, guojia[i].goldpro, guojia[i].medalpro);
// }
}
return 0;
}