hdu 1084做题笔记

题意是:有N个人做5道题,给出做出题的个数和花费的总时间,做出5道题给100分,做出4道题给95或90,类推。如果有>=2个人做出题的数目一样,则取前n/2的人较多的分数,如有3个人做出4道题,则第一得95分,其他得90分。主要用的是sort函数。

AC代码如下:

#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=101;
struct node{
	int score;//学生的得分 
	int num;//学生做出的题目数目 
	char time[10];//花费的时间 
}student[N];
bool cmp(node a,node b)
{
	if(a.num==b.num)
		return strcmp(a.time,b.time)<0;//当做出题目相等时,按时间由少到多排序 
	else
		return a.num>b.num;//按题目数目由多到少排序 
}
int s[6][2]={50,50,60,65,70,75,80,85,90,95,100,100};
int main()
{
	int n,i,x[6];
	char tmp[N][10];
	while(scanf("%d",&n),n!=-1)
	{
		for(i=1;i<=n;i++)
		{
			scanf("%d%s",&student[i].num,student[i].time);
			strcpy(tmp[i],student[i].time);//备个份,记录原顺序 
		}
		sort(student+1,student+n+1,cmp);
		memset(x,0,sizeof(x));//相同题目数,排名在n/2以前的数目 
		for(i=1;i<=n;i++)
		{
			switch(student[i].num)
			{
				case 4:x[4]++;break;
				case 3:x[3]++;break;
				case 2:x[2]++;break;
				case 1:x[1]++;break;
				default:break;
			}
		}
		for(i=1;i<=4;i++)
			if(x[i]!=1)x[i]/=2;
		for(i=1;i<=n;i++)
		{
			if(x[student[i].num]>0){
				student[i].score=s[student[i].num][1];
				x[student[i].num]--;
			}
			else
				student[i].score=s[student[i].num][0];
		}
		for(i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(strcmp(tmp[i],student[j].time)==0){
					printf("%d\n",student[j].score);
					break;
				}
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值