题目链接:

https://nuoyanli.com/contest/27/problem/H

题面:



题意:

一开始输入一个整数T,代表T组测试数据。每组测试数据的第一行有三个整数n,m,k分别表示n个人参加比赛,有m道题,k条提交记录,接下来有k行,表示k条提交记录每条提交记录由三个整数a,b,c和字符串d组成,a表示提交时间(单位分钟),b表示提交人的编号,c表示提交问题的编号,d表示提交状态。接下来通过这些数据,来判断cxk是否获得第一名,如果为第一名,则输出WAAAAA,否则就输出第一名的编号

思路:

这道题目明显属于一道结构体的题目,我们首先需要定义一个结构体来存储一系列有关联的变量,这道题目需要存储的就有比赛者的编号以及其答对的题目,所用的总时间,所罚时的总时长,以及是否答对题目这几个有关联的变量。我们就将其定义在一个结构体中,之后我们就正常输入题目所需要输入的值,对于输入的提交信息,我们需要对其进行处理,我们要判断这提交信息是否答题已经正确若已经正确,则知道题目所用的时间就已经是一个确定值,将罚时与提交时间相加就可以了如果未答对,就对其罚时进行处理,每次打错罚时20分钟注:如果此题从头到尾都没有答对,就不需要将其存入总时间中),然后处理完k组提交信息之后,定义一个函数来决定sort排序的规律,先根据题量再根据时长,然后进行排序,之后就可以判断编号为1的cxk是否获得第一名,这道题目的要求也就解决了!!!参考代码如下:

参考代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
char s[10000];
struct people
{
    int id;//比赛人的编号
    int sum_n;//总答对的题量
    int sum_time;//总时长
    int fan_time[1000];//罚时的时长
    int TF[1000];//判断这道题目是否答对
} temp[10000];
bool cmp(people a,people b)
{
    if(a.sum_n==b.sum_n)
    {
        return a.sum_time<b.sum_time;//当题量相同时,根据时间从小到大排序。
    }
    return a.sum_n>b.sum_n;//先按照题量进行从大到小排序。

}
int main()
{
    int n,m,k;
    int T;
    scanf("%d",&T);//输入T组数据。
    while(T--)
    {
        memset(temp,0,sizeof(temp));//将结构体中的元素全部清0。
        scanf("%d%d%d",&n,&m,&k);
        int a,b,c;
        for(int i=1; i<=k; i++)
        {
            scanf("%d%d%d%s",&a,&b,&c,s);
            temp[b].id=b;//
            if(s[0]=='A'&&(temp[b].TF[c]==0))//判断这道题目是否已经被AC或者刚好AC,第二个条件就是判断这道题目是否已经被AC的语句,若已经被AC则不为0.
            {
                temp[b].TF[c]=1;//标记这道题目已经被答对。
                temp[b].sum_time+=(temp[b].fan_time[c]+a);//将此题的罚时时间和提交时间得出总时间。
                temp[b].sum_n++;//答对的题量进行+1。
            }
            else//此种情况为答错的情况。
            {
                temp[b].fan_time[c]+=20;//每次答错增加罚时20分钟。
            }
        }//注:我们将做对一道题目的总时间存储在temp[b].sum_time中,根据代码我们可以看出,当这道题目从始至终没有被答对时,我们始终没有运行if中的语句,就也没有将时间存储在其中,我们就实现只将做对的题目存储其总时间。
        sort(temp+1,temp+1+n,cmp);//通过sort排序按所定义的函数进行排序。
        if(temp[1].id==1)//当第一名的编号为cxk的编号时,输出WAAAAA。
            printf("WAAAAA\n");
        else//其他情况输出第一名的编号。
            printf("%d\n",temp[1].id);

    }
}