티스토리 뷰

백준 :: BOJ :: 16235 :: 나무 재테크


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


#include <bits/stdc++.h>

using namespace std;


struct Tr {

int i, j, a;

bool operator<(const Tr& vv) const { return a < vv.a; }

};

int N, M, K, A[11][11], arr[11][11];

int di[] = { -1,-1,-1,0,1,1,1,0 }, dj[] = { -1,0,1,1,1,0,-1,-1 };

vector <Tr> v, tv; queue<Tr> q;


inline bool chk(int i, int j) { return (i > 0 && j > 0 && i <= N && j <= N) ? true : false; }


void year() {

sort(v.begin(), v.end()); Tr t;

for (int i = 0; i < v.size(); i++) {

t = v[i];

if (arr[t.i][t.j] >= t.a) { arr[t.i][t.j] -= t.a; t.a++;  tv.push_back(t); }

else q.push(t);

}

v.swap(tv); tv.clear();


while (!q.empty()) {

t = q.front(); q.pop();

arr[t.i][t.j] += (t.a / 2);

}


for (int i = 0; i < v.size(); i++) {

if (v[i].a % 5 == 0) {

for (int d = 0; d < 8; d++) {

t = v[i]; t.i += di[d]; t.j += dj[d]; t.a = 1;

if (chk(t.i, t.j)) v.push_back(t);

}

}

}


if (K) for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) arr[i][j] += A[i][j];

}


int main() {

std::ios::sync_with_stdio(false); cin.tie(0);

cin >> N >> M >> K;

for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) {

cin >> A[i][j]; arr[i][j] = 5;

}

while (M--) {

Tr tmp; cin >> tmp.i >> tmp.j >> tmp.a;

v.push_back(tmp);

}

while (K--) {

year();

}

cout << v.size();

return 0;

}


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

[BOJ 17144] 미세먼지 안녕!  (2) 2019.05.14
[BOJ 3190] 뱀  (0) 2019.01.21
[BOJ 16234] 인구 이동  (0) 2019.01.09
[BOJ 16236] 아기 상어  (0) 2019.01.09
[BOJ 5373] 큐빙  (2) 2018.10.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함