您的位置:首页 > 其它

hdu 3789 奥运排序问题 模拟

2013-09-17 14:56 323 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3789

首先 题目要求只对m个国家排序,然后输出的顺序是给的国家编号的顺序~~!! 不一定是升序` wa了n次在这里

然后用sort死做

代码:

#include<iostream>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;

struct   nation
{
long double  gold;
long double  all;
long double  area;
int id;
int rate1;
int rate2;
int rate3;
int rate4;
int bestrate;
int sortway;

};

int cmpway;

bool cmp(nation a,nation b)
{
if(cmpway==0)   return a.id<b.id;
else  if(cmpway==1)return a.gold>b.gold;

else if(cmpway==2)  return a.all>b.all;

else if(cmpway==3)  return a.gold/a.area>b.gold/b.area;

else if(cmpway==4)  return a.all/a.area>b.all/b.area;

}

int main()
{
int n,m;
bool flag=0;
while(cin>>n>>m)
{

nation p
;

vector<nation>  vn;

double gold,all,area;
for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf",&gold,&all,&area);
p[i].gold=gold;
p[i].all=all;
p[i].area=area;
p[i].id=i;
}

int   temp;
for(int i=0;i<m;i++)
{
scanf("%d",&temp);
vn.push_back(p[temp]);
vn[i].id=i;

}
if(m>0)
{

cmpway=1;
sort(vn.begin(),vn.end(),cmp);
for(int i=0;i<m;i++)
{
vn[i].rate1=i;
}

for(int i=1;i<m;i++)
{
if(vn[i].gold==vn[i-1].gold)   vn[i].rate1=vn[i-1].rate1;

}

cmpway=2;
sort(vn.begin(),vn.end(),cmp);
for(int i=0;i<m;i++)
{
vn[i].rate2=i;
}

for(int i=1;i<m;i++)
{
if(vn[i].all==vn[i-1].all)   vn[i].rate2=vn[i-1].rate2;

}

cmpway=3;
sort(vn.begin(),vn.end(),cmp);
for(int i=0;i<m;i++)
{
vn[i].rate3=i;
}

for(int i=1;i<m;i++)
{
if(vn[i].gold/vn[i].area==vn[i-1].gold/vn[i-1].area)   vn[i].rate3=vn[i-1].rate3;

}

cmpway=4;
sort(vn.begin(),vn.end(),cmp);
for(int i=0;i<m;i++)
{
vn[i].rate4=i;
}

for(int i=1;i<m;i++)
{
if(vn[i].all/vn[i].area==vn[i-1].all/vn[i-1].area)   vn[i].rate4=vn[i-1].rate4;

}

cmpway=0;
sort(vn.begin(),vn.end(),cmp);

for(int i=0;i<m;i++)
{

vn[i].bestrate=vn[i].rate1;
vn[i].sortway=1;
if(vn[i].rate2<vn[i].bestrate)
{
vn[i].bestrate=vn[i].rate2;
vn[i].sortway=2;
}

if(vn[i].rate3<vn[i].bestrate)
{
vn[i].bestrate=vn[i].rate3;
vn[i].sortway=3;
}

if(vn[i].rate4<vn[i].bestrate)
{
vn[i].bestrate=vn[i].rate4;
vn[i].sortway=4;
}

}
//        if(flag==1)  printf("\n");
//        if(flag==0)  flag=1;
for(int i=0;i<m;i++)
printf("%d:%d\n",vn[i].bestrate+1,vn[i].sortway);
}
cout<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: