1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <vector>

typedef std::vector<int> VI;
typedef std::vector<VI> Pula;

using namespace std;

class PrzypadekTestowy
{
private:
	FILE* _input;
	
	inline void WczytajInt(int* value)
	{
		auto _ = fscanf(_input, "%d", value);
	}

	inline void WczytajlZestaw(int *runda, char *zestaw)
	{
		auto _ = fscanf(_input, "%d%c", runda, zestaw);
	}	

public:
	PrzypadekTestowy() :_input(stdin)
	{
	}
	PrzypadekTestowy(FILE* input)
	{
		_input = input;
	}

	inline void Wykonaj()
	{
		int n = 0;		
		WczytajInt(&n);
		Pula zestaw = Pula(5,VI(3,0)); //5 rund		

		for (int i = 0; i < n; i++)
		{
			int runda;
			char dywizja;
			WczytajlZestaw(&runda, &dywizja);
			zestaw[runda-1][(int)(dywizja-'A')]++;
		}		
		bool czyOk = SprawdzCzyJestKomplet(zestaw);

		printf("%s\n", (czyOk ? "TAK" : "NIE"));
	}
	inline bool SprawdzCzyJestKomplet(Pula& zestaw)
	{
		int ileZad[] = { 1,1,1,1,2 };
		for (int i = 0; i < zestaw.size(); i++)
		{
			auto z = zestaw[i];
			int ileZadWym = ileZad[i];
			for (auto r : z)
			{
				if (r < ileZadWym)					
				{
					return false;					
				}
			}
		}
		return true;
	}
};

int main(int argc, char** argv)
{
	FILE* in = stdin;
	if (argc > 1)
	{
		in = fopen(argv[1], "rt");
		if (NULL == in)
		{
			in = stdin;
		}
	}

	PrzypadekTestowy* p = new PrzypadekTestowy(in);
	p->Wykonaj();
	fclose(in);
	delete(p);
	return 0;
}