제출 #44280

#제출 시각아이디문제언어결과실행 시간메모리
44280JustInCaseTetris (COCI17_tetris)C++17
80 / 80
2 ms868 KiB
#include <bits/stdc++.h>
using namespace std;

//------------------------------------------------

struct Figure {
	int type;
	vector< int > xChanges, yChanges;

	Figure();
	Figure(int type, const vector< int > &xChanges, const vector< int > &yChanges);
};

Figure::Figure() {
	
}

Figure::Figure(int type, const vector< int > &xChanges, const vector< int > &yChanges)
	: type(type), xChanges(xChanges), yChanges(yChanges) {
}

//------------------------------------------------

char a[15][15];
vector< Figure > figures;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	vector< int > xChanges(4), yChanges(4);

	xChanges[0] = 0;
	xChanges[1] = 0;
	xChanges[2] = 1;
	xChanges[3] = 1;
	yChanges[0] = 0;
	yChanges[1] = 1;
	yChanges[2] = 0;
	yChanges[3] = 1;
	figures.push_back(Figure(1, xChanges, yChanges));

	xChanges[2] = 0;
	xChanges[3] = 0;
	yChanges[2] = 2;
	yChanges[3] = 3;
	figures.push_back(Figure(2, xChanges, yChanges));

	xChanges[1] = 1;
	xChanges[2] = 2;
	xChanges[3] = 3;
	yChanges[1] = 0;
	yChanges[2] = 0;
	yChanges[3] = 0;
	figures.push_back(Figure(2, xChanges, yChanges));

	xChanges[1] = 0;
	xChanges[2] = 1;
	xChanges[3] = 1;
	yChanges[1] = 1;
	yChanges[2] = -1;
	yChanges[3] = 0;
	figures.push_back(Figure(3, xChanges, yChanges));

	xChanges[1] = 1;
	xChanges[2] = 1;
	xChanges[3] = 2;
	yChanges[1] = 0;
	yChanges[2] = 1;
	yChanges[3] = 1;
	figures.push_back(Figure(3, xChanges, yChanges));

	xChanges[1] = 0;
	xChanges[2] = 1;
	xChanges[3] = 1;
	yChanges[1] = 1;
	yChanges[2] = 1;
	yChanges[3] = 2;
	figures.push_back(Figure(4, xChanges, yChanges));

	xChanges[1] = 1;
	xChanges[2] = 1;
	xChanges[3] = 2;
	yChanges[1] = 0;
	yChanges[2] = -1;
	yChanges[3] = -1;
	figures.push_back(Figure(4, xChanges, yChanges));

	xChanges[1] = 1;
	xChanges[2] = 1;
	xChanges[3] = 1;
	yChanges[1] = -1;
	yChanges[2] = 0;
	yChanges[3] = 1;
	figures.push_back(Figure(5, xChanges, yChanges));

	xChanges[1] = 1;
	xChanges[2] = 1;
	xChanges[3] = 2;
	yChanges[1] = 0;
	yChanges[2] = 1;
	yChanges[3] = 0;
	figures.push_back(Figure(5, xChanges, yChanges));

	xChanges[1] = 0;
	xChanges[2] = 0;
	xChanges[3] = 1;
	yChanges[1] = 1;
	yChanges[2] = 2;
	yChanges[3] = 1;
	figures.push_back(Figure(5, xChanges, yChanges));
	
	xChanges[1] = 1;
	xChanges[2] = 1;
	xChanges[3] = 2;
	yChanges[1] = -1;
	yChanges[2] = 0;
	yChanges[3] = 0;
	figures.push_back(Figure(5, xChanges, yChanges));

	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < m; j++) {
			cin >> a[i][j];
		}
	}
	
	int cnt[] = {0, 0, 0, 0, 0, 0};
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < m; j++) {
			if(a[i][j] != '.') {
				for(Figure f : figures) {
					bool isOk = true;
					for(int p = 1; p < 4; p++) {
						if(i + f.xChanges[p] >= 0 && i + f.xChanges[p] < n) {
							if(j + f.yChanges[p] >= 0 && j + f.yChanges[p] < m) {
								if(a[i + f.xChanges[p]][j + f.yChanges[p]] != a[i][j]) {
									isOk = false;
								}
							}
							else {
								isOk = false;
							}
						}
						else {
							isOk = false;
						}
					}

					if(isOk) {
						for(int p = 0; p < 4; p++) {
							a[i + f.xChanges[p]][j + f.yChanges[p]] = '.';
						}
						cnt[f.type]++;
						break;
					}
				}
			}
		}
	}
	
	for(int i = 1; i <= 5; i++) {
		cout << cnt[i] << endl;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...