페이지

2344번: 거울

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


#include<stdio.h>
int N, M, data[1010][1010], ans[4040], fx[2] = { 0,-1 }, fy[2] = { 1,0 }, d, x, y;
int main()
{
    int i, j;
    scanf("%d%d", &N, &M);
    for (i = 1; i <= N; i++)
    {
        for (j = 1; j <= M; j++)
        {
            scanf("%d", &data[i][j]);
        }
    }
    for (i = 1; i <= N; i++)
    {
        d = 0;
        x = i;
        y = 1;
        while (x >= 1 && y <= M)
        {
            if (data[x][y] == 1 && d == 0)
            {
                d = 1;
            }
            else if (data[x][y] == 1 && d == 1)
            {
                d = 0;
            }
            x += fx[d];
            y += fy[d];
        }
        if (x == 0)
        {
            ans[i] = 2 * (N + M) - y + 1;
            ans[2 * (N + M) - y + 1] = i;
        }
        else
        {
            ans[i] = 2 * N + M - x + 1;
            ans[2 * N + M - x + 1] = i;
        }
    }
    for (i = 1; i <= M; i++)
    {
        d = 1;
        x = N;
        y = i;
        while (x >= 1 && y <= M)
        {
            if (data[x][y] == 1 && d == 0)
            {
                d = 1;
            }
            else if (data[x][y] == 1 && d == 1)
            {
                d = 0;
            }
            x += fx[d];
            y += fy[d];
        }
        if (x == 0)
        {
            ans[N + i] = 2 * (N + M) - y + 1;
            ans[2 * (N + M) - y + 1] = N + i;
        }
        else
        {
            ans[N + i] = 2 * N + M - x + 1;
            ans[2 * N + M - x + 1] = N + i;
        }
    }
    for (i = 1; i <= 2 * (N + M); i++)
    {
        printf("%d ", ans[i]);
    }
    return 0;
}

댓글 없음 :

댓글 쓰기