답안 #821548

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
821548 2023-08-11T11:27:35 Z radaiosm7 화성 (APIO22_mars) C++17
0 / 100
1 ms 200 KB
#include "mars.h"
#include <bits/stdc++.h>
#define X first
#define Y second
using namespace std;
vector<pair<int, int> > adj[20][20];
bool vis[20][20];

int id(int i, int j, int n) {
	return i*n+j;
}

bool valid(int i, int j, int n) {
	if (i < 0) return false;
	if (i >= n) return false;
	if (j < 0) return false;
	if (j >= n) return false;
	return true;
}

void dfs(int x, int y) {
	vis[x][y] = true;

	for (auto p : adj[x][y]) {
		if (!vis[p.X][p.Y]) dfs(p.X, p.Y);
	}
}

string process(vector<vector<string> > a, int i, int j, int k, int n) {
	string ans(100, '0');
	int tn = n;
	n = 2*n+1;

	if (k == 0) {
		for (int dx=0; dx < 3; ++dx) for (int dy=0; dy < 3; ++dy) if (a[dx][dy][0] == '1') ans[id(i+dx, j+dy, n)] = '1';
	}

	else {
		for (int dx=0; dx < 3; ++dx) for (int dy=0; dy < 3; ++dy) for (int jk=0; jk < 100; ++jk) if (a[dx][dy][jk] == '1') ans[jk] = '1';
	}

	if (k == tn-1) {
		char mat[n][n];
		for (int dx=0; dx < n; ++dx) for (int dy=0; dy < n; ++dy) vis[dx][dy] = false;
		for (int dx=0; dx < n; ++dx) for (int dy=0; dy < n; ++dy) mat[dx][dy] = ans[id(dx, dy, n)];
		int cc = 0;

		for (int dx=0; dx < n; ++dx) {
			for (int dy=0; dy < n; ++dy) {
				if (mat[dx][dy] == '1') {
					if (valid(dx-1, dy, n) && mat[dx-1][dy] == '1') {
						adj[dx][dy].push_back(make_pair(dx-1, dy));
						adj[dx-1][dy].push_back(make_pair(dx, dy));
					}

					if (valid(dx+1, dy, n) && mat[dx+1][dy] == '1') {
						adj[dx][dy].push_back(make_pair(dx+1, dy));
						adj[dx+1][dy].push_back(make_pair(dx, dy));
					}

					if (valid(dx, dy-1, n) && mat[dx][dy-1] == '1') {
						adj[dx][dy].push_back(make_pair(dx, dy-1));
						adj[dx][dy-1].push_back(make_pair(dx, dy));
					}

					if (valid(dx, dy+1, n) && mat[dx][dy+1] == '1') {
						adj[dx][dy].push_back(make_pair(dx, dy+1));
						adj[dx][dy+1].push_back(make_pair(dx, dy));
					}
				}
			}
		}

		for (int dx=0; dx < n; ++dx) {
			for (int dy=0; dy < n; ++dy) {
				if (mat[dx][dy] == '1' && !vis[dx][dy]) {
					++cc;
					dfs(dx, dy);
				}
			}
		}

		string conn(100, '0');
		for (i=0; i < 9; ++i) if (cc & (1 << i)) conn[i] = '1';
		return conn;
	}

	else return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Incorrect
2 Halted 0 ms 0 KB -