티스토리 뷰

Algorithm/SW Expert Academy

2382 미생물 격리

henry1214 2018. 3. 26. 18:11

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



실제로 시뮬레이션을 해본다. 매 시간마다 상하좌우에서 현재 위치로 오는 미생물들을 검사하고 다음 상태를 저장한다. 가장자리에서의 예외 처리, 모든 경우의 수 처리, 테스트 케이스마다 초기화에 유의하자.



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <cstdio>
 
int t,n,m,k,map[100][100][2],tmap[100][100][2],ans;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; // 하상우좌
 
void solve()
{
    while(m--)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                int sum=0,t=0,d=0;
                bool f=false;
                for(int k=0;k<4;k++)
                {
                    int nx=i+dx[k],ny=j+dy[k];
                    int &S=map[nx][ny][0],&D=map[nx][ny][1];
                    if(nx<0 || nx>=|| ny<0 || ny>=|| !S)
                        continue;
                    if((D==1 && k==0|| (D==2 && k==1|| (D==3 && k==2|| (D==4 && k==3))
                    {
                        f=true;
                        sum+=S;
                        if(t<S) t=S,d=D;
                    }
                }
 
                if(!f) continue;
                if(i==0 || i==n-1 || j==0 || j==n-1)
                {
                    sum/=2;
                    if(d==1 || d==3) d++;
                    else d--;
                }
                tmap[i][j][0]=sum;
                tmap[i][j][1]=d;
            }
        }
 
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                map[i][j][0]=tmap[i][j][0];
                map[i][j][1]=tmap[i][j][1];
                tmap[i][j][0]=tmap[i][j][1]=0;
            }
        }
    }
 
    ans=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            ans+=map[i][j][0];
            map[i][j][0]=map[i][j][1]=0;
        }
    }
}
 
int main()
{
    scanf("%d",&t);
    for(int T=1;T<=t;T++)
    {
        scanf("%d %d %d",&n,&m,&k);
        while(k--)
        {
            int a,b,c,d;
            scanf("%d %d %d %d",&a,&b,&c,&d);
            map[a][b][0]=c;
            map[a][b][1]=d;
        }
        solve();
        printf("#%d %d\n",T,ans);
    }
    return 0;
}
cs


'Algorithm > SW Expert Academy' 카테고리의 다른 글

1249 보급로  (0) 2018.03.27
4050 재관이의 대량 할인  (0) 2018.03.27
2117 홈 방범 서비스  (0) 2018.03.24
2115 벌꿀채취  (0) 2018.03.24
2112 보호 필름  (0) 2018.03.22
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday