문제
세로 길이 N, 가로 길이 M 인 2 차원 배열에 k 명의 사람이 있다. i 번 사람은 1 초에 di 방향으로 fi 만큼 이동하고, 배열의 끝에 도착하면 다음 이동 시 뒤로 돌아서 반대 방향으로 이동한다. t 초 후 각 사람의 위치를 1 번 사람부터 출력하여라.
이 배열의 왼쪽 위 좌표는 (1, 1) 이고, 오른쪽 아래 좌표는 (M, N) 이다. xi 는 i 번 사람의 가로 방향 위치, yi 는 i 번 사람의 세로 방향 위치를 의미한다. di 는 0, 1, 2, 3 중 하나로 주어지는데, 순서대로 상하좌우를 의미한다.
입력
첫 줄에 N, M, k, t 가 주어진다.
두 번째 줄 부터 k 줄에 걸쳐 yi, xi, di, fi 가 주어진다.
(3 ≤ N, M ≤ 1,000,000,000, 1 ≤ t, k ≤ 100,
1 ≤ yi ≤ N, 1 ≤ xi ≤ M, 0 ≤ di ≤ 3, 1 ≤ fi ≤ 1,000,000,000)
출력
k 줄에 걸쳐 각 사람의 t 초 후 위치를 y, x 순서로 출력한다.
입력의 예 1
4 5 3 2
1 1 3 1
2 2 1 2
3 5 2 3
출력의 예 1
1 3
2 2
3 3
입력의 예 2
34615 23432 3 435
4531 23431 0 783
4897 21541 1 3288
34600 4897 3 23464
출력의 예 2
10066 23431
18613 21541
34600 4181
입력의 예 3
3461542 2318432 3 1000000
457831 233431 0 78353
4897 21541 1 3288
34600 4897 3 23464
출력의 예 3
2899907 233431
459055 21541
34600 1483177
입력의 예 4
3461542 2318432 3 43345
457831 233431 0 78353
4897 21541 1 3288
34600 4897 3 23464
출력의 예 4
3442776 233431
2861467 21541
34600 1579199
#코드
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
|
import sys
# 세로 길이 N, 가로 길이 M 인 2 차원 배열에 k 명의 사람이 있다.
# i 번 사람은 1 초에 di 방향으로 fi 만큼 이동
# 배열의 끝에 도착하면 다음 이동 시 뒤로 돌아서 반대 방향으로 이동한다.
# t 초 후 각 사람의 위치를 1 번 사람부터 출력하여라.
# 이 배열의 왼쪽 위 좌표는 (1, 1) 이고, 오른쪽 아래 좌표는 (M, N) 이다
# xi 는 i 번 사람의 가로 방향 위치, yi 는 i 번 사람의 세로 방향 위치를 의미
# di 는 0, 1, 2, 3 중 하나로 주어지는데, 순서대로 상하좌우를 의미한다.
def get_next(cur, dist, max_size):
global t, d, next_idx
while cur + dist < 1 or cur + dist > max_size:
d = next_idx[d]
if cur + dist < 1:
dist += cur-1
cur = 1
dist = -dist
elif cur + dist > max_size:
dist -= max_size - cur
cur = max_size
dist = -dist
return cur + dist
if __name__ == "__main__":
input = sys.stdin.readline
N, M, k, t = map(int, input().split())
# 상,하,좌,우
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
next_idx = [1, 0, 3, 2] # 상 하 좌 우 방향의 반댓값
for i in range(k):
y, x, d, f = map(int, input().split())
if d == 0 or d == 1: t%=2*N-2
else: t%=2*M-2
for _ in range(t):
y = get_next(y, f*dy[d], N)
x = get_next(x, f*dx[d], M)
print(y, x)
|
cs |