본문 바로가기

정보올림피아드&알고리즘

개미

개미

문제

가로 길이가 w이고 세로 길이가 h인 2차원 격자 공간이 있다. 

이 격자는 아래 그림처럼 왼쪽 아래가 (0,0)이고 오른쪽 위가 (w,h)이다. 

이 공간 안의 좌표 (p,q) 에 개미 한 마리가 놓여있다. 

개미는 오른쪽 위 45도 방향으로 일정한 속력으로 움직이기 시작한다. 

처음에 (p,q)에서 출발한 개미는 1시간 후에는 (p+1, q+1) 로 옮겨간다.

 

단, 이 속력으로 움직이다가 경계면에 부딪치면 같은 속력으로 반사되어 움직인다.

 

 

 

위 그림은 6 × 4 격자에서 처음에 (4,1) 에서 출발한 개미가 움직인 길을 보여주고 있다. 

처음에 (4,1) 에 있는 개미는 2시간 후에 (6,3) 에 있으며 8시간 후에 (0,1) 에 있다. 

만일 그 개미가 처음에 (5,3) 에 있었다면 매 시간마다 (6,4), (5,3), (4,2), (3,1)로 움직인다.

 

여러분은 크기 w × h인 격자 공간에서 

처음에 (p,q)에서 출발하는 개미의 t시간 후의 위치 (x,y) 를 계산하여 출력해야 한다. 

개미는 절대 지치지 않고 같은 속력으로 이동한다고 가정한다.

 

문제에서 w와 h는 자연수이며 범위는 2 ≤ w, h ≤ 40,000 이다. 

그리고 개미의 초기 위치 p와 q도 자연수이며 범위는 각각 0 < p < w 과 0 < q < h 이다. 

그리고 계산할 시간 t의 범위는 1 ≤ t ≤ 2,000,000,000 이다. 

단, 채점 데이터의 40%는 1 ≤ t ≤ 100,000,000 이다.

 

 

입력형식

입력파일의 첫줄에는 w와 h가 공백을 사이에 두고 주어진다.

그 다음 줄에는 초기 위치의 좌표값 p와 q가 공백을 사이에 두고 주어진다. 

3번째 줄에는 개미가 움직일 시간 t가 주어진다.

 

출력형식

출력은 t 시간 후에 개미의 위치 좌표 (x, y) 의 값 x와 y를 공백을 사이에 두고 출력한다.

 

입력 예

출력 예

6 4
4 1
8
0 1

입력 예

출력 예

6 4
5 3
4
3 1

 

소스코드

더보기

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
 
int main()
{
    int x, y, p, q, h, mok;
    int r_x, r_y;
 
    scanf("%d %d", &x, &y);
    scanf("%d %d", &p, &q);
    scanf("%d", &h);
 
    mok = (p + h) / x;
    if (mok % 2 == 1)
        r_x = x - ((p + h) % x);
    else
        r_x = (p + h) % x;
 
    mok = (q + h) / y;
    if (mok % 2 == 1)
        r_y = y - ((q + h) % y);
    else
        r_y = (q + h) % y;
 
    printf("%d %d\n", r_x, r_y);
 
 
    return 0;
}

 

'정보올림피아드&알고리즘' 카테고리의 다른 글

다각형그리기  (0) 2022.03.03
쇠막대기  (0) 2022.01.26
토마토(초)  (0) 2022.01.26
직사각형  (0) 2022.01.25
참외밭  (0) 2022.01.13