瑞安市信息学竞赛复赛前练习2 1754 Problem D看比赛 题解
发布于 2020-11-21
题目描述
比赛开始了,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;
}