CF493A Vasya and Football 题解

Content

有两个球队在踢足球,现在给出一些足球运动员被黄牌或红牌警告的时间,求每个队员第一次被红牌警告的时间。

注意:根据足球比赛规则,两张黄牌自动换成一张红牌

数据范围:比赛时间 \(90\) 分钟,足球员号码 \(\leqslant 99\)

Solution

这道题目就是一个很纯粹的模拟。主要注意以下几点:

  1. 两个球队当中也许有相同号码的球员。比如说近现代的 \(10\) 号球员有很多,比如说齐达内和梅西等。
  2. 球员被红牌下场了,但后面还有可能会录入关于该球员的警告信息,此时应该忽略它。

考虑完这些,模拟就简单多了。

Code

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

string a, b;
int num_of_foul, ye[2][1007], vis[2][1007];

int main() {
	cin >> a >> b;
	scanf("%d", &num_of_foul);
	for(int i = 1; i <= num_of_foul; ++i) {
		int t_of_foul, num;
		char ha[2], yr[2];
		scanf("%d%s%d%s", &t_of_foul, ha, &num, yr);
		if(yr[0] == 'r' && (ha[0] == 'h' ? !vis[0][num] : !vis[1][num])){
			if(ha[0] == 'h')	cout << a << ' ';
			else if(ha[0] == 'a')	cout << b << ' ';
			printf("%d %d\n", num, t_of_foul);
			if(ha[0] == 'h')	vis[0][num] = 1;
			else if(ha[0] == 'a')	vis[1][num] = 1;
		} else if(yr[0] == 'y') {
			if(ha[0] == 'h')	ye[0][num]++;
			else if(ha[0] == 'a')	ye[1][num]++;
			if(ye[0][num] == 2 && !vis[0][num]) {
				cout << a << ' ';
				printf("%d %d\n", num, t_of_foul);
				vis[0][num] = 1;
			} else if(ye[1][num] == 2 && !vis[1][num]){
				cout << b << ' ';
				printf("%d %d\n", num, t_of_foul);
				vis[1][num] = 1;
			}
		}
	}
} 
posted @ 2021-12-21 20:57  Eason_AC  阅读(32)  评论(0)    收藏  举报