티스토리 뷰

SWEA::2382::미생물 격리


출처 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl



#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;


struct me {

int ii, jj, num, d,ttmp;

};


int N, M, K;

int dir[5][2] = { {0,0}, {-1,0},{1,0},{0,-1},{0,1} };

vector<me> m;


int cal(int time, int me_n) {

while (time--) {

for (int i = 0; i < m.size(); i++) { // move

m[i].ii += dir[m[i].d][0]; m[i].jj += dir[m[i].d][1];

m[i].ttmp = m[i].num;

}

for (int i = 0; i < m.size()-1; i++) { // combine

for (int j = i + 1; j < m.size(); j++) {

if (m[i].ii == m[j].ii && m[i].jj == m[j].jj) {

m[i].d = ((m[i].ttmp > m[j].ttmp) ? m[i].d : m[j].d);

m[i].ttmp = ((m[i].num > m[j].num) ? m[i].num : m[j].num);

m[i].num += m[j].num;

m.erase(m.begin() + j); j -= 1;

}

}

}

for (int i = 0; i < m.size(); i++) { // red

if (m[i].ii == 0 || m[i].ii == N - 1 || m[i].jj == 0 || m[i].jj == N - 1) {

int tmp = m[i].num; tmp /= 2; me_n -= (m[i].num - tmp); m[i].num /= 2;

if (m[i].d % 2==0) m[i].d -= 1;

else m[i].d += 1;

}

}

}

return me_n;

}


int main() {


std::ios::sync_with_stdio(false);

int T; cin >> T;


for (int tc = 1; tc <= T; tc++) {


cin >> N >> M >> K; m.clear(); m.resize(K); int tmpSum = 0;

for (int i = 0; i < K; i++) {

cin >> m[i].ii >> m[i].jj >> m[i].num >> m[i].d;

tmpSum += m[i].num;

}


cout << "#" << tc << " " << cal(M,tmpSum) << endl;

}

return 0;

}


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

[SWEA 5432] 쇠막대기 자르기  (0) 2018.08.29
[SWEA 5431] 민석이의 과제 체크하기  (0) 2018.08.29
[SWEA 2383] 점심 식사시간  (2) 2018.08.16
[SWEA 1244] 최대 상금  (0) 2018.08.13
[SWEA 1224] 계산기3  (0) 2018.08.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함