牛客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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章