好久没有在AC了,一个考试加五一长假。o(︶︿︶)o 唉、今天做了一下 HDU-step 明显感觉思考能力下降了,一个排序纠结了好久……话说过几天得去福州邀请赛了,这个状态真不行啊。
今天做的几道题目以前就做过了,本来打算了练手的,结果成了学习新知识。囧~
下面主要谈谈这题:http://acm.hdu.edu.cn/showproblem.php?pid=1084。纠结了好久……
题目的主题思想还是排序。比较烦的是要根据不同的等级分别进行排序。很是蛋疼,我是看了一位大牛的解法才会做的。不多说,我直接把两份代码都粘上:
大牛代码:
本人的:
#define read freopen("zx.in","r",stdin)
#define write freopen("zx.out","w",stdout)
const int MAXN=100+10;
typedef struct
{
int num,grade,score;
long long time;
}ARR;
ARR zx[MAXN];
bool cmp(ARR a,ARR b)
{
if(a.grade!=b.grade) return a.grade<b.grade;
return a.time>b.time;
}
bool cmp2(ARR a,ARR b)
{
return a.num<b.num;
}
int main()
{
read, write;
int nnum,h,m,s,sum[MAXN],arr[MAXN];
char buf[MAXN];
while(scanf("%d",&nnum)!=EOF && nnum>0)
{
memset(sum,0,sizeof(sum));
memset(arr,0,sizeof(arr));
for(int i=0;i<nnum;i++)
{
scanf("%d%s",&zx[i].grade,buf);
arr[zx[i].grade]++;
sscanf(buf,"%d:%d:%d",&h,&m,&s);
zx[i].time=h*3600+m*60+s;
zx[i].num=i;
}
for(int i=4;i>=1;i--)
{
sum[i]+=arr[i+1], sum[i]+=sum[i+1];
}
sort(zx,zx+nnum,cmp);
for(int i=0;i<nnum;i++)
{
zx[i].score=100-(5-zx[i].grade)*10;
if(zx[i].grade!=5 && ((i+1)-sum[zx[i].grade])<=arr[zx[i].grade]/2 && zx[i].grade)
zx[i].score+=5;
}
sort(zx,zx+nnum,cmp2);
for(int i=0;i<nnum;i++) printf("%d/n",zx[i].score);
printf("/n");
}
return 0;
}