OJ_1007
来源:互联网 发布:ubuntu忘记登录密码 编辑:程序博客网 时间:2024/05/17 22:01
#include <iostream>#include <stdlib.h>#include <algorithm>using namespace std;typedef struct record{ int gold; int prize;// double goldr;// double prizer; int num; int id; int rank[5];}record;bool compid(const record& a,const record &b){ return a.id<b.id;}bool comp1(const record& a,const record &b){ return a.gold>b.gold; }bool comp2(const record& a,const record &b){ return a.prize>b.prize; } bool comp3(const record& a,const record &b){ return a.gold*b.num>b.gold*a.num; } bool comp4(const record& a,const record &b){ return a.prize*b.num>b.prize*a.num; } void func(){ int n,m; while(cin>>n>>m) { record re[n]; for(int i=0;i<n;i++) { int gold,prize,num; cin>>gold>>prize>>num; re[i].gold=gold; re[i].prize=prize; // re[i].goldr=(double)gold/num; // re[i].prizer=(double)prize/num; re[i].num=num; } record r[m]; for(int i=0;i<m;i++) { int t; cin>>t; r[i]=re[t]; r[i].id=i; } int way=1; sort(r,r+m,comp1); for(int i=0;i<m;i++) { r[i].rank[way]=i+1; if(i!=0) if(r[i].gold==r[i-1].gold) r[i].rank[way]=r[i-1].rank[way]; /* if(i==0) r[i].rank[way]=1; else if(r[i].gold==r[i-1].gold) r[i].rank[way]=r[i-1].rank[way]; else r[i].rank[way]=r[i-1].rank[way]+1; */ } way++; sort(r,r+m,comp2); for(int i=0;i<m;i++) { r[i].rank[way]=i+1; if(i!=0) if(r[i].prize==r[i-1].prize) r[i].rank[way]=r[i-1].rank[way]; } way++; sort(r,r+m,comp3); for(int i=0;i<m;i++) { r[i].rank[way]=i+1; if(i!=0) if(r[i].gold*r[i-1].num==r[i-1].gold*r[i].num) r[i].rank[way]=r[i-1].rank[way]; } way++; sort(r,r+m,comp4); for(int i=0;i<m;i++) { r[i].rank[way]=i+1; if(i!=0) if(r[i].prize*r[i-1].num==r[i-1].prize*r[i].num) r[i].rank[way]=r[i-1].rank[way]; } sort(r,r+m,compid); int min; int minway; for(int i=0;i<m;i++) { for(int j=1;j<=4;j++) { if(j==1){ min=r[i].rank[j]; minway=j; } else{ if(min>r[i].rank[j]){ min=r[i].rank[j]; minway=j; } } } cout<<min<<":"<<minway<<endl; } cout<<endl; }}int main(int argc, char *argv[]){ //printf("Hello, world\n");func();return 0;}
每种排名方式都算一次
相同排名时,名次数不增加
注意:
相同数目排序名次如何变化;除法的相等比较,利用 通分改为乘法
- 题目描述:
按要求,给国家进行排名。
- 输入:
- 有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。
- 输出:
- 排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和 最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。
- 样例输入:
4 44 8 16 6 24 8 22 12 40 1 2 34 28 10 18 11 28 12 38 13 40 3
- 样例输出:
1:31:12:11:21:11:1
0 0
- OJ_1007
- 九度OJ_1007
- 北大OJ_1007题:DNA Sorting
- cocos2dx使用cocostudio动画
- HTTPS 与SSL
- 教大家如何设置2个或多个路由器连接一个网线
- VC++ ^和gcnew
- list index out of range
- OJ_1007
- HDU1253_胜利大逃亡(BFS裸三维)
- 关于myeclipse 8.5下android开发R.java文件不生成或不更新问题的解决
- 两个栈实现一个队列与两个队列实现一个栈
- 本来想多写点东西.可写的时候才发现自己什么也不熟特别是oracle要多练习
- OJ_1008 最短路径问题
- C++中L和_T()之区别
- tar 解压缩命令
- 使用开源imageLoader优化listview加载大量本地图片的demo