嘿嘿,嘿嘿,自己写出来啦,这道题好玩,嘿嘿,嘿嘿
【问题描述】
火星人足球赛的比赛规则与地球人的比赛规则有些非常相似,比如严重犯规,将被给予黄牌警告,特别严重的犯规,将给予红牌直接罚下,如果有人得到第2张黄牌,则自动获得红牌罚下,比赛同样采取主客场制。
与地球人足球赛不同的是,火星人足球赛每队可以上场的人数不会固定为11人,可以多个人,比赛时间也会更长一些。
比赛时的裁判员是机器人,判罚非常严厉,如果有人获得红黄牌,机器人裁判将自动记录当时的情况。
【输入形式】
输入的第一行为主队队名,第二行为客队队名,队名的长度不超过20个字符。
第三行为一个整数 n (0 ≤ n ≤ 90) ,表示得到红黄牌的犯规次数。
接下来的n行,每行包含用空格分隔的4个部分,表示犯规的情况:
-
-
首先为一个整数,表示犯规的时间(分钟)
-
接着为一个字符"h"或"a",如果为"h",表示该张牌会给到主队球员,否则会给到客队球员
-
接下来为球员编号m (1 ≤ m ≤ 99)
-
接下来为一个字符"y"或"r",如果为"y",表示为黄牌,否则为红牌
-
不同球队的球员可能有相同的号码,在同一球队球员的号码不相同,犯规记录按时间顺序排列。
【输出形式】
输出按时间顺序排列的获得红牌的记录,如果时间相同,则主队排在前面,如果同一时间同一球队有多人获得红牌,则编号大的排在前面。每个红牌一行,包含3个部分:球员所属球队的名字、犯规球员编号、获得红牌时间。
如果全场比赛无红牌,输出"No Red Card"
#include<iostream> #include<algorithm> using namespace std; struct Warn{ int time; char team; int num; char color; }; bool cmp(Warn x,Warn y){ if(x.time==y.time) return x.team=='h'||(x.num>y.num&&(x.team==y.team)); else return x.time<y.time; } int main(){ string a,b; cin>>a>>b; int n; cin>>n; Warn* warn=new Warn[n]; int tmp1[101]={}; int tmp2[101]={}; for(int i=0;i<n;i++){ cin>>warn[i].time; cin>>warn[i].team; cin>>warn[i].num; cin>>warn[i].color; if(warn[i].color=='y'&&warn[i].team=='h'){ tmp1[warn[i].num]++; if(tmp1[warn[i].num]==2){ warn[i].color='r'; } } if(warn[i].color=='y'&&warn[i].team=='a'){ tmp2[warn[i].num]++; if(tmp2[warn[i].num]==2){ warn[i].color='r'; } } } //::如果有人得到第2张黄牌,则自动获得红牌罚下 //输出按时间顺序排列的获得红牌的记录 //::如果时间相同,则主队排在前面 //::如果同一时间同一球队有多人获得红牌,则编号大的排在前面 sort(warn,warn+n,cmp); bool bo=0; for(int i=0;i<n;i++){ if(warn[i].color=='r'){ bo=1; if(warn[i].team=='h') cout<<a<<' '; else cout<<b<<' '; cout<<warn[i].num<<' '<<warn[i].time<<endl; } } if(bo==0)cout<<"No Red Card"<<endl; }