답안 #652171

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
652171 2022-10-21T14:41:40 Z 4EVER Tetris (COCI17_tetris) C++11
80 / 80
1 ms 340 KB
/******************************
*    author : @yayayaya       *
*    date : 21 / 10 / 2022    *
******************************/

/*   (≈ㅇᆽㅇ≈)♡    (≈ㅇᆽㅇ≈)♡    (≈ㅇᆽㅇ≈)♡    (≈ㅇᆽㅇ≈)♡    (≈ㅇᆽㅇ≈)♡ */
/*
                              /^--^\     /^--^\     /^--^\
                              \____/     \____/     \____/
                             /      \   /      \   /      \
                            |        | |        | |        |
                             \__  __/   \__  __/   \__  __/
        |^|^|^|^|^|^|^|^|^|^|^|^\ \^|^|^|^/ /^|^|^|^|^\ \^|^|^|^|^|^|^|^|^|^|^|^|
        | | | | | | | | | | | | |\ \| | |/ /| | | | | |\ \| | | | | | | | | | | |
        | | | | | | | | | | | | |/ /| | |\ \| | | | | |/ /| | | | | | | | | | | |
        | | | | | | | | | | | | |\/ | | | \/| | | | | |\/ | | | | | | | | | | | |
        #########################################################################
        | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
        | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |         */

/*******************************************************************************************
*            #################################################################             *
*            #                             _`                                #             *
*            #                          _ooOoo_                              #             *
*            #                         o8888888o                             #             *
*            #                         88" . "88                             #             *
*            #                         (| -_- |)                             #             *
*            #                         O\  =  /O                             #             *
*            #                      ____/`---'\____                          #             *
*            #                    .'  \|     |//  `.                         #             *
*            #                   /  \|||  :  |||//  \                        #             *
*            #                  /  _||||| -:- |||||_  \                      #             *
*            #                  |   | \  -  /'| |   |                        #             *
*            #                  | \_|  `\`---'//  |_/ |                      #             *
*            #                  \  .-\__ `-. -'__/-.  /                      #             *
*            #                ___`. .'  /--.--\  `. .'___                    #             *
*            #             ."" '<  `.___\_<|>_/___.' _> \"".                 #             *
*            #            | | :  `- \`. ;`. _/; .'/ /  .' ; |                #             *
*            #            \  \ `-.   \_\_`. _.'_/_/  -' _.' /                #             *
*            #=============`-.`___`-.__\ \___  /__.-'_.'_.-'=================#             *
*                                      `=--=-'                                             *
*                                                                                          *
*                                       /\_/\*                                             *
*                                      (  -.-)                                             *
*         _.-/`)                       / >O  \>1                            _.-/`)         *
*        // / / )                                                         // / / )         *
*     .=// / / / )              /\_/\           /\_/\                  .=// / / / )        *
*    //`/ / / / /              (  -.-)         (  -.-)                //`/ / / / /         *
*   // /     ` /               / >O  \>1       / >O  \>1             // /     ` /          *
*   \       /                                                        \       /             *
*    ))    .'            /\_/\         /\_/\         /\_/\            ))    .'             *
*   //    /             (  -.-)       (  -.-)       (  -.-)           //    /              *
*        /              / >O  \>1     / >O  \>1     / >O  \>1              /               *
*                                                                                          *
*******************************************************************************************/

#include <bits/stdc++.h>
// #pragma GCC optimize("O2")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimize ("O3,unroll-loops,no-stack-protector")
// #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

#define PB push_back
#define ALL(i_) i_.begin(), i_.end()
#define LOG2(x) (31 - __builtin_clz(x))
#define getBit(x, i) ((x >> i) & 1)
#define rd(l, r) (l + rng() % (r - l + 1))
#define FOR(i_, a_, b_)  for(int i_ = (int) (a_); i_ <= (int) (b_); ++i_)
#define FORD(i_, a_, b_) for(int i_ = (int) (a_); i_ >= (int) (b_); --i_)
#define db(val) "["#val" = "<<(val)<<"] "

typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;

template<class X, class Y> bool minimize(X &x, const Y &y){
    X eps = 1e-9;
    if (x > y + eps) {
        x = y;
        return 1;
    }
    return 0;
}

template<class X, class Y> bool maximize(X &x, const Y &y) {
    X eps = 1e-9;
    if (x + eps < y) {
        x = y;
        return 1;
    }
    return 0;
}

template<class T> T Abs(const T &x) { return (x < 0 ? -x : x); }

const int mod = (int) 1e9 + 7;
const int oo = (int) 1e9 + 99;
const int maxn = (int) 22;
const int LOG = (int) 20;
const ii dxy8[] = { {-1, 0}, {1, 0}, {0, 1}, {0, -1}, {1, -1}, {1, 1}, {-1, 1}, {-1, -1} };
const ii dxy4[] = { {-1, 0}, {1, 0}, {0, 1}, {0, -1} };

int n, m;
char a[maxn][maxn], b[maxn][maxn];
int vs[maxn][maxn];
vector<ii> figure;
int res[5];

void DFS(int u, int v){
	figure.PB({u, v});
	vs[u][v] = 1;
	FOR(i, 0, 3){
		int p = u + dxy4[i].first;
		int q = v + dxy4[i].second;
		if(p >= 1 && p <= max(n, m) && q >= 1 && q <= max(n, m)){
			if(!vs[p][q] && a[p][q] == a[u][v]) DFS(p, q);
		}
	}
}

void solve(){
	int cnt = 0;
	sort(ALL(figure));
	vector<vector<int>> mark(n + 11, vector<int>(m + 11, 0));
	FOR(i, 0, 3) mark[figure[i].first][figure[i].second] = 1;

	int u = figure[0].first;
	int v = figure[0].second;

	int cnt_0 = 0;
	cnt_0 += (mark[u + 1][v] + mark[u][v + 1] + mark[u + 1][v + 1]);
	if(cnt_0 == 3) ++res[0];

	int cnt_1 = 0;
	cnt_1 += (mark[u][v + 1] + mark[u][v + 2] + mark[u][v + 3]);
	if(cnt_1 == 3) ++res[1];

	int cnt_2 = 0;
	cnt_2 += (mark[u][v + 1] + mark[u + 1][v] + mark[u + 1][v - 1]);
	if(cnt_2 == 3) ++res[2];

	int cnt_3 = 0;
	cnt_3 += (mark[u][v + 1] + mark[u + 1][v + 1] + mark[u + 1][v + 2]);
	if(cnt_3 == 3) ++res[3];

	int cnt_4 = 0;
	cnt_4 += (mark[u + 1][v] + mark[u + 1][v - 1] + mark[u + 1][v + 1]);
	if(cnt_4 == 3) ++res[4];
}

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #define TASK "TETRIS"
    if(fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }
    cin >> n >> m;
    FOR(i, 0, max(n, m)){
    	FOR(j, 0, max(n, m)) a[i][j] = '.';
    }

    FOR(i, 1, n){
    	FOR(j, 1, m) cin >> a[i][j];
    } 	
    FOR(k, 0, 3){
    	FOR(i, 1, max(n, m)){
    		FOR(j, 1, max(n, m)){
    			b[j][max(n, m) - i + 1] = a[i][j];
    		}
    	}
    	memset(vs, 0, sizeof vs);
	    FOR(i, 1, max(n, m)) FOR(j, 1, max(n, m)) if(!vs[i][j] && (a[i][j] != '.')){
	    	figure.clear();
	    	DFS(i, j);
	    	solve();
	    }
	    FOR(i, 1, max(n, m)){
	    	FOR(j, 1, max(n, m)){
	    		a[i][j] = b[i][j];
	    	}
	    }
	}
	cout << res[0] / 4 << "\n";
	cout << res[1] / 2 << "\n";
	cout << res[2] / 2 << "\n";
	cout << res[3] / 2 << "\n";
	cout << res[4] << "\n";
    return 0;
}

/// CONCACOCONCACOCONCACOCONCACOCONCACOCONCACOCONCACOCONCACOCONCACO /// 

Compilation message

tetris.cpp: In function 'void solve()':
tetris.cpp:124:6: warning: unused variable 'cnt' [-Wunused-variable]
  124 |  int cnt = 0;
      |      ^~~
tetris.cpp: In function 'int main()':
tetris.cpp:157:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  157 |         freopen(TASK".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
tetris.cpp:158:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  158 |         freopen(TASK".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 328 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 328 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct