hdu 3789 奥运排序问题 模拟

题目地址: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[n];

        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("
");
//        if(flag==0)  flag=1;
         for(int i=0;i<m;i++)
            printf("%d:%d
",vn[i].bestrate+1,vn[i].sortway);
        }
        cout<<endl;
  }
}


原文地址:https://www.cnblogs.com/814jingqi/p/3339260.html