zoukankan      html  css  js  c++  java
  • 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;
      }
    }
    


  • 相关阅读:
    android 回调的理解(结合接口)
    Android Bundle、Handler和Message类介绍
    Android: Intent实现活动之间的交互
    Condition实现一个生产者一个消费者
    condition实现通知部分线程
    Condition实现等待、通知
    ReentrantLock简单实现2
    ReentrantLock的简单使用
    线程通信-基于字符流管道
    线程通信-基于字节流管道
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3339260.html
Copyright © 2011-2022 走看看