当前位置: 代码迷 >> 综合 >> HDU 2093 考试排名
  详细解决方案

HDU 2093 考试排名

热度:28   发布时间:2023-12-05 06:31:54.0
//题意自己看,应该都懂得
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
struct node 
{char name[15];int ac;int time;
}student[10005];
//结构体,包括人名,AC题数,时间 
int cmp(node a,node b)
{if(a.ac==b.ac&&a.time==b.time)return strcmp(a.name,b.name)<0;//人名排序 else if(a.ac==b.ac)return a.time<b.time;//时间排序 elsereturn a.ac>b.ac;//ACA题数排序		
}	//排序 int main(int argc, char *argv[])
{int a,i,j,num,m;scanf("%d%d",&num,&m);i=0;//i来判断有几个人参加竞赛 while(scanf("%s",student[i].name)!=EOF)//一直循环到没有人名输入	{student[i].ac=student[i].time=0;//每次循环开始时都把这个人的AC数和时间清零 for(j=0;j<num;j++)//循环每一题的状态 {scanf("%d",&a);if(a<=0)continue;//如果a<=0则表示这道题没有A student[i].ac++;//没有进上一步的continu则表明A了这题 ,A的题数相加 student[i].time+=a;//时间相加 if(getchar()=='(')//判断之前是否有WA {scanf("%d",&a);//读取WA的次数 student[i].time+=a*m;//罚时相加 getchar();//吸收一个对应括号		}				}i++;//人数增加	}sort(student,student+i,cmp);//结构体排序 for(j=0;j<i;j++)printf("%-10s %2d %4d\n",student[j].name,student[j].ac,student[j].time);//排序后循环输出 return 0;
}
//Start-ZJ
//2017/11/30/11:54