瑞安市信息学竞赛复赛前练习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号被黄牌警告
注意,一个人如果被警告两次就将被罚下(相当于一张红牌)。
现在,要输出的是两队的比分、被罚下的名单和被警告的名单。
假设只有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,那么之后
输入队伍和号码。
之后n 行,每行一个事件,如果第一个词语是Goal,之后输入
进球的编号;如果第一个词语是 RedCard 或YellowCard,那么之后
输入队伍和号码。
输出
第一行,格式为A(A 的得分):(B 的得分)B
第二行,输出”SentOff:”
之后若干行,每行一个 A 或B,一个号码,表示被罚下的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。
下一行,输出”Warning:”
之后若干行,每行一个 A 或B,一个号码,表示被警告的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。
第二行,输出”SentOff:”
之后若干行,每行一个 A 或B,一个号码,表示被罚下的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。
下一行,输出”Warning:”
之后若干行,每行一个 A 或B,一个号码,表示被警告的人,之
间用空格隔开,规定先 A 后B,按号码大小排序。
样例输出
A(1):(3)B
SentOff:
A 4
B 8
Warning:
B 10
提示
【样例解释1】
B 队进了 3 个球,A 队进了一个。A 队 4 号被罚下,B 队 8 号累
积两张黄牌下场,B队的10 号被黄牌警告一次
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看比赛 题解的主要内容,如果未能解决你的问题,请参考以下文章