록키의 No Pain, No Gain

[BOJ] 16235번 나무 재테크 본문

알고리즘

[BOJ] 16235번 나무 재테크

Rohki 2020. 5. 21. 21:03
반응형

https://www.acmicpc.net/problem/16235

 

16235번: 나무 재테크

부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터

www.acmicpc.net

시뮬레이션 문제

문제를 잘 읽고 이를 시각화 시키는 연습이 필요할 것 같다.

조급해 하지 말고 문제 집중해서 제대로 읽기

 

#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int N, M, K;
int A[11][11];
int map[11][11];
vector<int> tree[11][11];
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { -1,0,1,-1,1,-1,0,1 };
void spring() {
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			vector<int> v = tree[i][j];
			int value = 0;
			for (int k = v.size() - 1; k >= 0; k--) {
				if (v[k] <= map[i][j]) {
					map[i][j] -= v[k];
					v[k]++;
				}
				else {
					value += v[k] / 2;
					v.erase(v.begin()+k);
				}
			}
			map[i][j] += value;
			tree[i][j] = v;
		}
	}
}

void fall() {
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			vector<int> v = tree[i][j];
			for (int k = v.size() - 1; k >= 0; k--) {
				if (v[k] % 5 == 0) {
					for (int l = 0; l < 8; l++) {
						int nx = i + dx[l];
						int ny = j + dy[l];
						if (nx < 1 || nx > N || ny < 1 || ny > N)
							continue;
						tree[nx][ny].push_back(1);
					}
				}
			}
		}
	}
}

void winter() {
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			map[i][j] += A[i][j];
		}
	}
}

int calc() {
	int ret = 0;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			ret += tree[i][j].size();
		}
	}

	return ret;
}
int main() {
	cin >> N >> M >> K;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			cin >> A[i][j];
			map[i][j] = 5;
		}
	}

	int x, y, z;
	for (int i = 0; i < M; i++) {
		cin >> x >> y >> z;
		tree[x][y].push_back(z);
	}

	for (int i = 0; i < K; i++) {
		spring();
		fall();
		winter();
	}

	cout << calc();
}
반응형

'알고리즘' 카테고리의 다른 글

[BOJ] 1238 파티  (0) 2020.05.22
[BOJ] 1238 파티  (0) 2020.05.22
[SWEA] 점심 식사시간  (0) 2020.05.13
[BOJ] 17471번 게리멘더링  (0) 2020.04.28
[BOJ] 17822번 원판 돌리기  (0) 2020.04.28
Comments