#281 (div.2) A.Vasya and football

4998 단어 codeforces
A. Vasya and Football
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Vasya has started watching football games. He has learned that for some fouls the players receive yellow cards, and for some fouls they receive red cards. A player who receives the second yellow card automatically receives a red card.
Vasya is watching a recorded football match now and makes notes of all the fouls that he would give a card for. Help Vasya determine all the moments in time when players would be given red cards if Vasya were the judge. For each player, Vasya wants to know only the firstmoment of time when he would receive a red card from Vasya.
Input
The first line contains the name of the team playing at home. The second line contains the name of the team playing away. Both lines are not empty. The lengths of both lines do not exceed 20. Each line contains only of large English letters. The names of the teams are distinct.
Next follows number n (1 ≤ n ≤ 90) — the number of fouls.
Each of the following n lines contains information about a foul in the following form:
first goes number t (1 ≤ t ≤ 90) — the minute when the foul occurs;
then goes letter "h"or letter "a"— if the letter is "h", then the card was given to a home team player, otherwise the card was given to an away team player;
then goes the player's number m (1 ≤ m ≤ 99);
then goes letter "y"or letter "r"— if the letter is "y", that means that the yellow card was given, otherwise the red card was given.
The players from different teams can have the same number. The players within one team have distinct numbers. The fouls go chronologically, no two fouls happened at the same minute.
Output
For each event when a player received his first red card in a chronological order print a string containing the following information:
The name of the team to which the player belongs;
the player's number in his team;
the minute when he received the card.
If no player received a card, then you do not need to print anything.
It is possible case that the program will not print anything to the output (if there were no red cards).
Sample test(s)
input
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

output
MC 25 70
MC 42 82
CSKA 13 90

1. 문제 분석: 제가 CF에서 문제를 푸는 것은 이번이 처음입니다. 팀원들이 div2의 앞의 세 가지 문제가 모두 간단하다는 말을 듣고 한번 해 보자는 마음으로 했는데 결과는 의외였습니다.A문항만 15번(그중 7번 CE)을 냈으니 답답해서 할 말이 없다.각종 디테일이 해킹되다.사실 이것은 매우 간단한 시뮬레이션 문제로 처음으로 레드카드를 받은 선수를 검색하고 시간 순서대로 출력한다.내가 한 달 동안 코드를 두드리지 않았나 봐요.겨울방학 훈련이 시작되기 전에 손을 좀 익히고 싶다.결과는 이렇게 참담했다.열심히 해야겠다.그러나 교훈은 매우 귀중하다. 주로 다음과 같은 몇 가지가 있다.
(1) 입력, 출력 변수의 유형을 반드시 알아야 한다. int를 쓰는 데 익숙해져서 이것을 소홀히 하지 마라
(2) CF에서 MS C++ 컴파일러를 사용하는 것을 처음 알았고, 구조 함수는class에서만 ==
(3) 이 문제의 사고방식은'횟수+번호'로 대원 이름을 구성하고 하나의 ID를 분배하여 하나의 수조에 넣고 이 수조를 검색하는 것이다. 만약에 레드카드를 처음 받으면mark=true를 명령하고 마지막에 시간에 따라 정렬해야 구조 함수를 사용하면 모든 부수 조작은 구조 함수에서 이루어져야 하며 bool형 구성원이 있으면 구조 함수를 실행하면 자동으로true가 된다는 것을 알 수 있다.자세가 올라갔어...
코드:
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<string>
#include<sstream>
#include<queue>
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<fstream>
using namespace std;
int n;
string s1, s2;
class team
{
public:
	int time;
	string name;
	string card;
	bool mark;
	team(string n="",int t = 0, string c = "no",bool m=false) :name(n),time(t), card(c),mark(m){}
	bool operator <(const team&rhs)
	{
		return time < rhs.time;
	}
}t[110];
vector<string>Name;
map<string, int>list;
int ID(string name)
{
	if (!list.count(name))
	{
		Name.push_back(name);
		return list[name] = Name.size() - 1;
	}
	return list[name];
}
string na(char f)
{
	if (f == 'h')return s1;
	return s2;
}

int main()
{
	cin >> s1 >> s2 >> n;
	string name;
	int time;
	string field, num, card;
	for (int i = 0; i < n; i++)
	{
		cin >> time >> field >> num >> card;
		name = field + num;
		int ind = ID(name);
		if (t[ind].card == "no")
		{
			t[ind] = team(name, time, card);
			if (card == "r")
				t[ind].mark = true;
		}
		else if (t[ind].card=="y"&&t[ind].mark==false)
		{
			t[ind] = team(name, time, card, true);
		}
	}
		int cnt = Name.size();
		sort(t, t + cnt);
		for (int i = 0; i < cnt;i++)
		if (t[i].mark)
		{
			cout << na(t[i].name[0]) << ' ' << t[i].name.substr(1) << ' ' << t[i].time;
			if (i != cnt)cout << endl;
		}
	return 0;
}



좋은 웹페이지 즐겨찾기