【POJ】1581.A Contesting Decision

思路

这道题的大意就是根据OJ平台的规则设计一个判断胜负的程序。

使用结构体表示每个参加比赛的选手会比较方便,很简单。

代码

#include<stdio.h>
#include<stdlib.h>
struct ACM
{
    char name[20];
    int timesTry[4];//尝试的次数
    int timePer[4];//AC每道题花费的时间
    int numberCorrect;//做出来的题目总数
    int timeTotal;//总罚时
}ACMer;
int main(int argc, char const *argv[])
{
    int n;//总人数
    scanf("%d",&n);
    struct ACM *group = (struct ACM*)malloc(sizeof(ACMer)*n);
    int i;
    //读取数据
    for(i = 0; i < n; i++){
        group[i].numberCorrect = 0;
        group[i].timeTotal = 0;
        scanf("%s",group[i].name);
        int j;
        for(j = 0; j < 4; j++){
            scanf("%d%d",&group[i].timesTry[j],&group[i].timePer[j]);
            if(group[i].timePer[j] == 0)continue;
            else{
                    group[i].numberCorrect++;       //如果罚时不为0,那么做对的题目数量加1,总时间增加
                    group[i].timeTotal += group[i].timePer[j] + 20*(group[i].timesTry[j] - 1);
            }
        }
    }

    //比较数据
    int index=0;//记录最优成绩的ACMer
    for(i = 1; i < n; i++){
        if(group[index].numberCorrect > group[i].numberCorrect)continue;
        else if(group[index].numberCorrect < group[i].numberCorrect)index = i;
        else{
            if(group[index].timeTotal < group[i].timeTotal)continue;
            else{
                index = i;
            }
        }
    }

    printf("%s %d %d\n",group[index].name,group[index].numberCorrect,group[index].timeTotal);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhaijiayu/p/9640106.html