首页 > 代码库 > 题目1007:奥运排序问题(自定义排序问题)
题目1007:奥运排序问题(自定义排序问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1007
详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus
参考代码:
//// 1007 奥运排序问题.cpp// Jobdu//// Created by PengFei_Zheng on 28/04/2017.// Copyright © 2017 PengFei_Zheng. All rights reserved.// #include <stdio.h>#include <iostream>#include <algorithm>#include <string.h>#include <cmath>//#include <cstring>#define MAX_SIZE 1010#define RANK 1 using namespace std; struct Country{ int id; int goldMedal; int totalMedal; int human; double goldRatio; double totalRatio; int rankGold; int rankTotal; int rankGoldRatio; int rankTotalRatio;}; Country country[MAX_SIZE];Country cal[MAX_SIZE]; int n, m; int cmpRankGold(const void* a, const void *b){ return (*(Country*)b).goldMedal - (*(Country*)a).goldMedal;} int cmpRankTotal(const void* a, const void *b){ return (*(Country*)b).totalMedal - (*(Country*)a).totalMedal;} int cmpRankGoldRatio(const void* a, const void *b){ return (*(Country*)b).goldRatio - (*(Country*)a).goldRatio;} int cmpRankTotalRatio(const void* a, const void *b){ return (*(Country*)b).totalRatio - (*(Country*)a).totalRatio;} int cmpId(const void* a, const void *b){ return (*(Country*)a).id - (*(Country*)b).id;} int main(){// freopen("/Users/pengfei_zheng/Desktop/input.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF){ for(int i = 0 ; i < n ; i++){ scanf("%d%d%d",&country[i].goldMedal,&country[i].totalMedal,&country[i].human); } for(int i = 0 ; i < m ; i++){ int tmpId; scanf("%d",&tmpId); cal[i] = country[tmpId]; cal[i].goldRatio = (double)cal[i].goldMedal/(double)cal[i].human; cal[i].totalRatio = (double)cal[i].totalMedal/(double)cal[i].human; cal[i].id=i; cal[i].rankGold=cal[i].rankTotal=cal[i].rankGoldRatio=cal[i].rankTotalRatio=MAX_SIZE; } qsort(cal,m,sizeof(Country),cmpRankGold); int rank = 1; cal[0].rankGold = 1; for(int i = 1 ; i < m ; i++){ if(cal[i].goldMedal!=cal[i-1].goldMedal){ rank = i + 1; } cal[i].rankGold = rank; } qsort(cal,m,sizeof(Country),cmpRankTotal); rank = 1; cal[0].rankTotal = 1; for(int i = 1 ; i < m ; i++){ if(cal[i].totalMedal!=cal[i-1].totalMedal){ rank = i + 1; } cal[i].rankTotal = rank; } qsort(cal,m,sizeof(Country),cmpRankGoldRatio); rank = 1; cal[0].rankGoldRatio = 1; for(int i = 1 ; i < m ; i++){ if(cal[i].goldRatio!=cal[i-1].goldRatio){ rank = i + 1; } cal[i].rankGoldRatio = rank; } qsort(cal,m,sizeof(Country),cmpRankTotalRatio); rank = 1; cal[0].rankTotalRatio = 1; for(int i = 1 ; i < m ; i++){ if(cal[i].totalRatio!=cal[i-1].totalRatio){ rank = i + 1; } cal[i].rankTotalRatio = rank; } qsort(cal,m,sizeof(Country),cmpId); for(int i = 0 ; i < m ; i++){// cout<<cal[i].rankGold<<" "<<cal[i].rankTotal<<" "<<cal[i].rankGoldRatio<<" "<<cal[i].rankTotalRatio<<endl; int minRank = cal[i].rankGold; int rankChoose = RANK; if(cal[i].rankTotal < minRank){ minRank = cal[i].rankTotal; rankChoose= RANK + 1; } if(cal[i].rankGoldRatio < minRank){ minRank = cal[i].rankGoldRatio; rankChoose = RANK + 2; } if(cal[i].rankTotalRatio < minRank){ minRank = cal[i].rankTotalRatio; rankChoose = RANK + 3; } printf("%d:%d\n",minRank,rankChoose); } printf("\n"); } return 0;}/************************************************************** Problem: 1007 User: zpfbuaa Language: C++ Result: Accepted Time:0 ms Memory:1612 kb****************************************************************/
题目1007:奥运排序问题(自定义排序问题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。