4 5 06:30:17 4 07:31:27 4 08:12:12 4 05:23:13 1 5 06:30:17 -1
100 90 90 95 100
#include<iostream>
#include<cstdio>
#include<cstring>
#define M 100001000
#include<algorithm>
using namespace std;
struct node{
int n,time;
}a[1005];//记录每个同学的答题状态和所用时间
int main()
{
int cas,flag5,flag4,flag3,flag2,flag1;//用于统计每个层次的人数
int s[1005],sa[1005],e[1005],y[1005];//记录每个层次排名前50%的人的位置
int n,i;
int l,q,p,k;
char str[20];
while(cin>>cas)
{
if(cas<0)
break;
flag4=flag3=flag2=flag1=0;
for(i=0;i<cas;i++)
{
cin>>a[i].n;
if(a[i].n==4)
flag4++;
else if(a[i].n==3)
flag3++;
else if(a[i].n==2)
flag2++;
else if(a[i].n==1)
flag1++;
cin>>str;
a[i].time=3600*(10*(str[0]-'0')+str[1]-'0')+60*(10*(str[3]-'0')+str[4]-'0')+10*(str[6]-'0')+str[7]-'0';//全部转化为秒
}
if(flag4!=1)
flag4=(flag4)/2;
if(flag3!=1)
flag3=flag3/2;
if(flag2!=1)
flag2=flag2/2;
if(flag1!=1)
flag1=flag1/2;
//每个层次只有前一半能拿到该层次的最高分 当每个层次只有一个人的时候那么这个人就能拿到该层次的最高分
l=0;q=0;p=0;k=0;
int b;
int mixn;
for(i=0;i<cas;i++) //标记出每个层次排名前50%的人的位置
{
if(a[i].n==4&&flag4)
{
mixn=a[i].time;
b=i;
for(int j=0;j<cas;j++)//每次循环都能找出该层次中用时最少的那个人的位置
//并将其标记且赋一个很大的值保证下次循环不会再被使用
{
if(a[j].n==4&&a[j].time<mixn)
{
mixn=a[j].time;
b=j;
}
}
s[l++]=b;
a[b].time=M;
flag4--;
}
if(a[i].n==3&&flag3)
{
mixn=a[i].time;
b=i;
for(int j=0;j<cas;j++)
{
if(a[j].n==3&&a[j].time<mixn)
{
mixn=a[j].time;
b=j;
}
}
sa[q++]=b;
a[b].time=M;
flag3--;
}
if(a[i].n==2&&flag2)
{
mixn=a[i].time;
b=i;
for(int j=0;j<cas;j++)
{
if(a[j].n==2&&a[j].time<mixn)
{
mixn=a[j].time;
b=j;
}
}
e[p++]=b;
a[b].time=M;
flag2--;
}
if(a[i].n==1&&flag1)
{
mixn=a[i].time;
b=i;
for(int j=0;j<cas;j++)
{
if(a[j].n==1&&a[j].time<mixn)
{
mixn=a[j].time;
b=j;
}
}
y[k++]=b;
a[b].time=M;
flag1--;
}
}
for(i=0;i<cas;i++)//输出
{
if(a[i].n==5)
cout<<"100"<<endl;
else if(a[i].n==4)
{
flag4=0;//前面的flag在后面没有用了所以偷了点懒重新利用了一下用于标记该同学的排名是否是他所处层次的前50%
for(int j=0;j<l;j++)
{
if(s[j]==i)
{
cout<<"95"<<endl;
flag4=1;
break;
}
}
if(!flag4)
{
cout<<"90"<<endl;
}
}
else if(a[i].n==3)
{
flag3=0;
for(int j=0;j<q;j++)
{
if(sa[j]==i)
{
cout<<"85"<<endl;
flag3=1;
break;
}
}
if(!flag3)
{
cout<<"80"<<endl;
}
}
else if(a[i].n==2)
{
flag2=0;
for(int j=0;j<p;j++)
{
if(e[j]==i)
{
cout<<"75"<<endl;
flag2=1;
break;
}
}
if(!flag2)
{
cout<<"70"<<endl;
}
}
else if(a[i].n==1)
{
flag3=0;
for(int j=0;j<k;j++)
{
if(y[j]==i)
{
cout<<"65"<<endl;
flag3=1;
break;
}
}
if(!flag3)
{
cout<<"60"<<endl;
}
}
else
cout<<"50"<<endl;
}
cout<<endl;
}
return 0;
}
hdu 1084 What Is Your Grade?,布布扣,bubuko.com
原文:http://blog.csdn.net/fanerxiaoqinnian/article/details/38262259