쿠나이

시간 제한3초메모리 제한256 MB

요약
거대한 격자 위의 닌자들이 네 방향으로 쿠나이를 던지고, 같은 시각 같은 지점에 도착한 쿠나이는 충돌해 사라질 때 살아남은 쿠나이가 지나간 칸 수를 센다.
난이도

어려움10점 중 8점

유형
기하, 해시맵, 정렬, 구현
정답자
아직 제출이 없습니다

문제

쿠나이(수리검)는 칼과 비슷하게 생긴, 닌자들이 사용하는 정교한 무기이다. 닌자들은 이 무기를 적에게 던져서 공격한다.

HH개의 행과 WW개의 열로 이루어진 정사각형 격자에 NN명의 닌자가 있다. 모든 닌자는 정사각형의 중앙에 서 있으며, 하나의 정사각형에는 최대 한 명의 닌자만 있을 수 있다. 각 닌자는 쿠나이를 하나씩 가지고 있고, 네 방향(오른쪽, 위, 왼쪽, 아래) 중 한쪽을 바라보고 있다. 시간 00에 모든 닌자는 자신이 바라보는 방향으로 쿠나이를 던진다.

모든 쿠나이는 단위 시간당 한 칸의 속도로 직선으로 나아간다. 둘 이상의 쿠나이가 같은 지점에 같은 순간에 도달하면, 그 쿠나이들은 서로 충돌하여 사라진다. 쿠나이의 크기는 무시할 수 있을 만큼 작다. 닌자들은 매우 빠르게 움직이므로 쿠나이에 맞지 않는다. 쿠나이는 다른 쿠나이와 충돌하지 않는 한 속도가 줄지 않고 같은 방향으로 계속 움직인다. 충돌은 정사각형의 중앙이 아니라 두 정사각형 사이의 중간 지점에서도 일어날 수 있다.

충분한 시간이 지난 후, W×HW \times H개의 정사각형 중에서 쿠나이가 한 번이라도 지나간 정사각형의 수를 구하라.

입력

첫째 줄에 격자의 크기를 나타내는 두 정수 WW와 HH가 공백 하나를 사이에 두고 주어진다 (1≤W≤1091 \le W \le 10^9, 1≤H≤1091 \le H \le 10^9).

둘째 줄에 닌자의 수를 나타내는 정수 NN이 주어진다 (1≤N≤1051 \le N \le 10^5).

이어지는 NN개의 줄 중 ii번째 줄에는 닌자 ii의 위치와 방향을 나타내는 세 정수 XiX_i, YiY_i, DiD_i가 주어진다. 닌자 ii는 왼쪽에서 XiX_i번째 열, 위에서 YiY_i번째 행에 있다 (1≤Xi≤W1 \le X_i \le W, 1≤Yi≤H1 \le Y_i \le H). 같은 정사각형에 두 명의 닌자가 있을 수는 없다. 닌자 ii가 바라보는 방향은 DiD_i로 나타낸다.

  • Di=0D_i = 0이면 닌자 ii는 오른쪽을 바라본다.
  • Di=1D_i = 1이면 닌자 ii는 위쪽을 바라본다.
  • Di=2D_i = 2이면 닌자 ii는 왼쪽을 바라본다.
  • Di=3D_i = 3이면 닌자 ii는 아래쪽을 바라본다.

출력

충분한 시간이 지난 후, W×HW \times H 격자에서 쿠나이가 지나간 정사각형의 수를 출력한다.

힌트

예제 입력을 생각하자. 닌자 ii가 던진 쿠나이를 "쿠나이 ii"라고 하자. 시간 0.50.5에서 쿠나이 22와 쿠나이 33이 두 칸 사이에서 만나 사라진다. 시간 22에서 쿠나이 11과 쿠나이 55가 충돌하여 사라진다. 시간 22 이후에는 더 이상 충돌이 일어나지 않는다. 최종적으로 쿠나이가 지나간 정사각형의 수는 1111이므로, 1111을 출력한다.

예제1

  1. 예제 1

    입력
    5 4
    5
    3 3 2
    3 2 0
    4 2 2
    5 4 1
    1 1 3
    
    예상 출력
    11