Hdu 1084 What Is Your Grade?解题报告

#include < iostream >
#include
< vector >
#include
< string >  
#include
< algorithm >
using   namespace  std;
 
struct  Grade
{
    
int nums;
    
int grade;
    
string times;
    
int index;
}
;

vector 
< Grade >  g;
int  cnt[ 6 ]; 
int  n;

bool  cmp1(Grade a, Grade b)
{
    
if (a.nums==b.nums)
        
return a.times<b.times;
    
else
        
return a.nums>b.nums;
}


bool  cmp2(Grade a, Grade b)
{
    
return a.index<b.index;
}


void  getGrade()
{
    
int cnt2[6]={0};

    
for(int i=0;i<n;i++)
    
{
        
if (g[i].nums==5
            g[i].grade
=100;
        
else if (g[i].nums==0)
            g[i].grade
=50;
        
else
        
{
            
int k=g[i].nums;
            
if (cnt2[k]<cnt[k])
            
{
                g[i].grade
=55+k*10;
                cnt2[k]
++;
            }

            
else
                g[i].grade
=50+k*10;
        }

    }

}


bool  run()
{
    cin 
>> n;
    
if (n<0return false;
    g.resize(n);
 
    
int i;
    
for(i=0;i<6;i++) cnt[i]=0;
    
    
for(i=0;i<n;i++)
    
{
        cin
>>g[i].nums >>g[i].times;
        g[i].index
=i;
        cnt[g[i].nums]
++;
    }


    sort(g.begin(),g.end(),cmp1);
    
    
for(i=0;i<6;i++) cnt[i]/=2;
    getGrade();

    sort(g.begin(),g.end(),cmp2);
    
    
for(i=0;i<n;i++) cout << g[i].grade << endl;    

    cout
<<endl;

    
return true;
}


int  main() 
{    
    
while(run());    
    
return 0
}

排序的一般方法,还要一点细心。方便起见,用用全局的数组,变量等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值