题目链接:http://acm.henu.edu.cn/contest/problem?id=2&pid=11
#include<stdio.h>
const int MAX = 1010;
struct student{
char Name[30];
int Number;//学号
int Average;//平均分
int Add;//竞赛加分
int IsFail;//是否挂科
};
struct student es,now;//临时记录,朱民钦学长的成绩信息
int N,K;
void solve(){
int More = 0;//记录比成绩排在朱民钦学长前面的人的个数。
scanf("%d%d",&N,&K);
scanf("%s%d%d%d%d",now.Name,&now.Number,&now.Average,&now.Add,&now.IsFail);
for(int i=1;i<=N-1;++i){
scanf("%s%d%d%d%d",es.Name,&es.Number,&es.Average,&es.Add,&es.IsFail);
if(es.IsFail == 0){//首先要判断没有挂科,因为朱民钦学长不会挂科
if(es.Average+es.Add > now.Average+now.Add){//如果成绩更高
More++;
}
else if(es.Average+es.Add == now.Average+now.Add && es.Number < now.Number)//如果成绩相同但学号更小
More++;
}
}
if(More < K)//如果排在他前面的人小于K个,那么他可以获得
printf("YES\n");
else
printf("This is impossible");
}
int main(void){
solve();
return 0;
}
本文解析了一个ACM竞赛中用于判断参赛者能否获得特定名次的算法。通过输入学生姓名、学号、平均分、加分和挂科状态,算法能够判断在不挂科的前提下,该学生是否能排在特定名次之前。核心逻辑在于比较学生的总分(平均分+加分)和学号,以确定其在排行榜上的位置。

被折叠的 条评论
为什么被折叠?



