美文网首页
校赛排名2

校赛排名2

作者: 见习炼丹师 | 来源:发表于2018-06-14 22:53 被阅读0次
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef struct stu {
    char name[100];
    int ac;
    int question[20][2];//question[i][0]为这道题的时间,[i][1]为这道题的罚时次数
    int totaltime;
} stu;
int cmp(stu a,stu b) {
    if(a.ac>b.ac)return 1;
    else if(a.ac==b.ac&&a.totaltime<b.totaltime)return 1;
    else if(a.totaltime==b.totaltime&&strcmp(a.name,b.name)>0)return 1;
    return 0;
}
int main() {
    int flag,time,result,i,j,TeamNum=0;
    char TeamName[100],QustName;
    stu team[1000];
    while(scanf("%d %s %c %d",&time,TeamName,&QustName,&result)!=EOF) {
        flag=0;//标记队伍是否第一次出现在排名榜上
        for(i=0; i<TeamNum; i++)
            if(strcmp(TeamName,team[i].name)==0) {
                flag=1;//标记已经查到这个队伍
                if(team[i].question[QustName-'A'][0])
                    break;  //不等于0说明这一题已经ac过了
                if(!result) {
                    team[i].ac++;
                    team[i].question[QustName-'A'][0]=team[i].question[QustName-'A'][1]*20+time;
                } else
                    team[i].question[QustName-'A'][1]++;
            }
        if(!flag) {//如果是正常跳出,没有查到这个队伍
            strcpy(team[TeamNum++].name,TeamName);
            if(!result) {
                team[i].ac++;
                team[i].question[QustName-'A'][0]=team[i].question[QustName-'A'][1]*20+time;
            } else
                team[i].question[QustName-'A'][1]++;
        }
    }
    for(i=0; i<TeamNum; i++)
        for(j=0; j<15; j++)
            team[i].totaltime+=team[i].question[j][0];
    sort(team,team+TeamNum-1,cmp);//为什么减一?
    for(int i=0; i<TeamNum; i++)
        if(team[i].ac!=0)
            printf("%s %d %d\n",team[i].name,team[i].ac,team[i].totaltime);
    return 0;
}

相关文章

网友评论

      本文标题:校赛排名2

      本文链接:https://www.haomeiwen.com/subject/gtiueftx.html