火星人足球

心已入冬 提交于 2019-12-16 15:01:05

【问题描述】

   火星人足球赛的比赛规则与地球人的比赛规则有些非常相似,比如严重犯规,将被给予黄牌警告,特别严重的犯规,将给予红牌直接罚下,如果有人得到第2张黄牌,则自动获得红牌罚下,比赛同样采取主客场制。

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

   比赛时的裁判员是机器人,判罚非常严厉,如果有人获得红黄牌,机器人裁判将自动记录当时的情况。       

【输入形式】

   输入的第一行为主队队名,第二行为客队队名,队名的长度不超过20个字符。

   第三行为一个整数 n (0 ≤ n ≤ 90) ,表示得到红黄牌的犯规次数。

   接下来的n行,每行包含用空格分隔的4个部分,表示犯规的情况:

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

接着为一个字符"h"或"a",如果为"h",表示该张牌会给到主队球员,否则会给到客队球员

接下来为球员编号m (1 ≤ m ≤ 99)

接下来为一个字符"y"或"r",如果为"y",表示为黄牌,否则为红牌

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

【输出形式】

   输出按时间顺序排列的获得红牌的记录,如果时间相同,则主队排在前面,如果同一时间同一球队有多人获得红牌,则编号大的排在前面。每个红牌一行,包含3个部分:球员所属球队的名字、犯规球员编号、获得红牌时间。

  如果全场比赛无红牌,输出"No Red Card"

【样例输入】

MC
CSKA
9
28 a 3 y
62 h 25 y
66 h 42 y
70 h 25 y
77 a 4 y
79 a 25 y
82 h 42 r
89 h 16 y
90 a 13 r
【样例输出】

MC 25 70
MC 42 82
CSKA 13 90

#include <iostream>
#include <string>
using namespace std;
struct player {
	int time,num,y_num;//y_num记录是否达到红牌条件
	string own,card;
} ;
int main() {
	string zd,kd;
	cin>>zd>>kd;
	int n=0;
	cin>>n;
	player pp[n];
	for(int i=0; i<n; i++) {
		pp[i].y_num=0;
		cin>>pp[i].time>>pp[i].own>>pp[i].num>>pp[i].card;
		if(pp[i].own=="h") pp[i].own=zd;
		else if(pp[i].own=="a") pp[i].own=kd;
	}
	player red[n];
	for(int k=0; k<n; k++) {

		red[k].num=0;
		red[k].time=0;
	}
	for(int i=0; i<n; i++) {
		if(pp[i].card=="r") red[i]=pp[i];
		else if(pp[i].card=="y") {
			for(int m2=0; m2<i; m2++) {
				if(pp[i].num==pp[m2].num&&pp[i].own==pp[m2].own)
					pp[i].y_num=2;
			}
			if(pp[i].y_num!=2) pp[i].y_num++;
		}
		if(pp[i].y_num==2) red[i]=pp[i];
		else continue;
	}
	int count=0;
	void ex(player &x,player &y);//定义交换函数
	for(int l3=0; l3<n; l3++)
		if(red[l3].num!=0) {
			count++;
			break;
		}
	for(int l1=0; l1<n-1; l1++) {
		for(int l2=l1+1; l2<n; l2++) {
			if(red[l1].time==red[l2].time) {
				if(red[l1].own==kd&&red[l2].own==zd) {
					ex(red[l1],red[l2]);
				} else if(red[l1].own==red[l2].own) {
					if(red[l1].num<red[l2].num) {
						ex(red[l1],red[l2]);
					}

				}
			}
		}
	}
	if(n==0)
		cout<<"No Red Card";
	else if(n>0) {
		for(int d=0; d<n; d++) {
			if(count==1) {
				if(red[d].num!=0) cout<<red[d].own<<" "<<red[d].num<<" "<<red[d].time<<'\n';
			} else if(count==0) {
				cout<<"No Red Card";
				break;
			}
		}
	}
	return 0;
}
void ex(player &x,player &y) {
	player z;
	z=x;
	x=y;
	y=z;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!