牛客oj 习题3.4奥运排序问题(较复杂的结构体排序)

没想到浙大会出来这么不严谨的题,数据量是多少都没给,遇到这种情况给个十万应付一下就好了。

整体思路没什么问题,就是对输入的数据中拿出部分分别对他们排序,然后再遍历找出名次,不要怕麻烦就好。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;
}
发布了411 篇原创文章 · 获赞 72 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Flynn_curry/article/details/104589748