瑞安市信息学竞赛复赛前练习2 1754 Problem D看比赛 题解

Posted o52luotianyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瑞安市信息学竞赛复赛前练习2 1754 Problem D看比赛 题解相关的知识,希望对你有一定的参考价值。

问题 D: 看比赛

时间限制: 1 Sec  内存限制: 128 MB

题目描述

比赛开始了,KK 准备记录下每一个重要的事件:红黄牌和进球。
假设只有A 队和B队,每队的号码是1~11 号。
进球事件的表示:Goal A 表示A 进球,Goal B 相反
红牌事件:RedCard A 1表示A队1 号被红牌罚下
黄牌事件:YellowCard B 2表示B队2号被黄牌警告
注意,一个人如果被警告两次就将被罚下(相当于一张红牌)。
现在,要输出的是两队的比分、被罚下的名单和被警告的名单。

输入

第一行,一个整数n,表示重要事件的个数(n<1000)
之后n 行,每行一个事件,如果第一个词语是Goal,之后输入
进球的编号;如果第一个词语是 RedCard 或YellowCard,那么之后
输入队伍和号码。

输出

第一行,格式为A(A 的得分):(B 的得分)B
第二行,输出”SentOff:”
之后若干行,每行一个 A 或B,一个号码,表示被罚下的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。
下一行,输出”Warning:”
之后若干行,每行一个 A 或B,一个号码,表示被警告的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。

样例输入

8 
Goal A 
RedCard A 4 
Goal B 
YellowCard B 8 
Goal B 
YellowCard B 8 
YellowCard B 10 
Goal B 

样例输出

A(1):(3)B 
SentOff:
A 4 
B 8 
Warning:
B 10 

提示

【样例解释1】
B 队进了 3 个球,A 队进了一个。A 队 4 号被罚下,B 队 8 号累
积两张黄牌下场,B队的10 号被黄牌警告一次
 
 

首先呢,通过它给我们的样例,可以清楚地看出来这是一道暴力大水题。可是有一点要注意的是,它的字符串读入是带空格的。在去年上级复赛的时候,就是由于这一点导致我的IDE崩溃。就在前几天,老师告诉我使用string+char(+int)就可以了。感谢老师的启发,本人终于做出了我深恶痛疾的模拟题。然后提醒一下:SentOff和Warning的后面是没有空格的!!!就是这一点,让萌新崩溃。

 

好,上代码:

 

 

#include<bits/stdc++.h>
using namespace std;
int n;
int a[12],b[12];
int A,B,tt,a1,b1,a2,b2;
string k;
char t;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>k;
        if(k=="Goal") 
        {
            cin>>t;//空格会忽略掉
            if(t==A) A++;
            else B++;
        }
        else
        {
            if(k[0]==R)
            {
                cin>>t;
                cin>>tt;
                if(t==A) a[tt]-=2;
                if(t==B) b[tt]-=2;//大于
            }
            if(k[0]==Y)
            {
                cin>>t;
                cin>>tt;
                if(t==A) a[tt]-=1;
                if(t==B) b[tt]-=1;
            }
        }
    }
    for(int i=1;i<=11;i++) if(a[i]<-2||a[i]==-2) a1++;
    for(int i=1;i<=11;i++) if(b[i]<-2||b[i]==-2) b1++;
    for(int i=1;i<=11;i++) if(a[i]==-1) a2++;
    for(int i=1;i<=11;i++) if(b[i]==-1) b2++;
    cout<<"A("<<A<<"):"<<"("<<B<<")B"<<endl;
    cout<<"SentOff:"<<endl;
    if(a1>0) 
    {
        for(int i=1;i<=11;i++) if(a[i]<-2||a[i]==-2) cout<<"A "<<i<<" "<<endl;
    }
    if(b1>0) 
    {
        for(int i=1;i<=11;i++) if(b[i]<-2||b[i]==-2) cout<<"B "<<i<<" "<<endl;
    }
    cout<<"Warning:"<<endl;
    if(a2>0) 
    {
        for(int i=1;i<=11;i++) if(a[i]==-1) cout<<"A "<<i<<" "<<endl;
    }
    if(b2>0) 
    {
        for(int i=1;i<=11;i++) if(b[i]==-1) cout<<"B "<<i<<" "<<endl;
    }
    return 0;
}

 

以上是关于瑞安市信息学竞赛复赛前练习2 1754 Problem D看比赛 题解的主要内容,如果未能解决你的问题,请参考以下文章

急求:信息学竞赛(普及组)的试卷(pascal)??

noip初赛题解

谁有NOIP的测试题(经典的)初赛复赛都行

悬赏!急!pascal竞赛普及组模拟试题

信息学第一轮认证有用吗

数据结构前导课 | 2 披荆斩棘——只学C++,可以做哪些竞赛题