JRS直播网

火星人足球赛:规则独特,裁判机器人判罚严厉

时间: 来源:JRS直播网

火星人的足球比赛规则和地球人很相似,比如严重犯规会黄牌警告,特别严重的犯规会红牌直接罚下,如果一个人拿到第二张黄牌,就会自动被红牌罚下,比赛也采用主客场制。

与地球上的足球比赛不同的是,火星足球比赛每队可上场的球员人数并不固定为11人,而是可以更多,比赛时间也会更长。

比赛中裁判是机器人,判罚非常严格,如果有人收到红牌或者黄牌足球比赛红牌,机器人裁判会自动记录情况。

【输入格式】

输入的第一行为主队名称,第二行为客队名称足球比赛红牌,球队名称长度不能超过20个字符。

第三行是一个整数n(0≤n≤90)足球比赛红牌,表示犯规次数,即红牌、黄牌的次数。

接下来的 n 行,每行包含 4 个以空格分隔的部分,表示违规行为:

首先,一个表示犯规时间的整数(分钟)

·然后是字母“h”或“a”,如果是“h”,则表示该牌将给到主队球员,否则将给到客队球员。

接下来,给玩家编号 m (1 ≤ m ≤ 99)

下一个字符是“y”或“r”。如果是“y”,则表示黄牌,否则表示红牌。

不同球队的球员可以拥有相同的号码,但同一球队的球员可以拥有不同的号码。犯规记录按时间顺序排列。

输出格式

按时间顺序输出红牌记录,时间相同则主队排在前,同队若有多位球员同时收到红牌,则以红牌号大者排在前。每张红牌占一行,包含3部分:球员所在球队名称、犯规球员号码、收到红牌时间。

若全场没有红牌,则输出“No Red Card”

【示例输入】

国会议员

中央陆军

28 一 3 岁

62小时25年

66小时42年

70 小时 25 年

77a4y

79 至 25 岁

82小时42分

89 小时 16 岁

90 一 13 r

示例输出

MC 25 70

MC 42 82

中央陆军 13 90

[示例代码]

#include
#include
using namespace std;
struct Record//犯规记录
{
    int time;
    char team;
    int number;
    char color;
};
struct Red//红牌犯规记录
{
    char team;
    int number;
    int time;
};
int main()
{
    string str1,str2;//用于存储参赛双方的队名
    cin>>str1;
    cin>>str2;
    int n;
    cin>>n;
    Record p[n];
    Red q[n];//声明的长度n为红牌记录的最多次数
    int t=0;
    for(int i=0;i<n;i++)
    {
        cin>>p[i].time>>p[i].team>>p[i].number>>p[i].color;
    }
    int f=0;
    for(int j=0;j<n;j++)
    {
        if(p[j].color=='y')
        {
            for(int k=0;k<j;k++)//检索该名队员之前是否出现过黄牌犯规记录而构成红牌犯规
            {
                if(p[j].number==p[k].number&&p[j].team==p[k].team)
                {
                        q[t].team=p[j].team;
                        q[t].number=p[j].number;
                        q[t].time=p[j].time;
                        t++;
                        f=1;
                }
            }
        }
        else if(p[j].color=='r')//红牌犯规直接出局
        {
                    q[t].team=p[j].team;
                    q[t].number=p[j].number;
                    q[t].time=p[j].time;
                    t++;
                    f=1;
        }
    }
    if(f==0) {cout<<"No Red Card"<<endl;}
    else
    {
        for(int k=0;k<t;k++)//处理同时间同队伍的红牌犯规成员记录按编号大到编号小的顺序输出、主队在前副队在后
        {
            for(int c=k+1;c<t;c++)
            {
                Red temp;
                if(q[k].time==q[c].time)
                {
                    if(q[k].team==q[c].team&&k<t&&q[k].number<q[c].number)
                    {
                        temp=q[k];q[k]=q[c];q[c]=temp;
                    }
                    else if((q[k].team=='h'&&q[c].team=='a'&&k>t)||(q[k].team=='a'&&q[c].team=='h'&&k<t))
                    {
                        temp=q[k];q[k]=q[c];q[c]=temp;
                    }
                }
            }
        }
        for(int i=0;i<t;i++)
        {
            if(q[i].team=='h') {cout<<str1<<' '<<q[i].number<<' '<<q[i].time<<endl;}
            else if(q[i].team=='a') {cout<<str2<<' '<<q[i].number<<' '<<q[i].time<<endl;}
        }
    }
    return 0;
}