아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

체스판

시간 제한1초메모리 제한128 MB

요약
최대 200,000개의 기물이 놓인 m×m 체스판에서 각 기물이 한 수로 잡을 수 있는 빈 칸의 개수를 센다.
난이도

보통10점 중 6점

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

문제

아주 큰 체스판 위에 같은 색의 말들이 여러 개 놓여 있다. 어떤 말이 한 번의 이동으로 어떤 칸에 도달할 수 있을 때, 그 말이 해당 칸을 잡는다고 한다. 구체적으로는 다음 두 조건을 모두 만족해야 한다.

  • 도착 칸에 다른 말이 놓여 있지 않다.
  • 퀸, 룩, 비숍의 경우 출발 칸과 도착 칸 사이의 경로에 다른 말이 하나도 없다.

말은 자기가 서 있는 칸은 잡지 못한다. 한 칸을 여러 말이 동시에 잡을 수도 있다.

각 말은 표준 체스 규칙대로 움직인다.

  • K(킹): 인접한 8방향으로 한 칸 이동한다.
  • S(나이트): L자 모양(2칸 후 1칸)으로 뛰며, 다른 말에 막히지 않는다.
  • W(룩): 가로나 세로로 원하는 만큼 미끄러진다.
  • G(비숍): 대각선으로 원하는 만큼 미끄러진다.
  • H(퀸): 가로, 세로, 대각선으로 원하는 만큼 미끄러진다.

모든 말에 대해 그 말이 잡는 칸의 개수를 구하여라.

입력

첫째 줄에 두 정수 nn과 mm이 공백 하나로 구분되어 주어진다 (1≤n≤200 0001 \le n \le 200\,000, 1≤m≤1091 \le m \le 10^9). nn은 말의 개수, mm은 정사각형 체스판의 한 변의 길이이다.

다음 nn개의 줄에는 각각 F x y 형식으로 말의 정보가 주어진다. F는 말의 종류를 나타내는 문자이다.

  • G - 비숍
  • H - 퀸
  • K - 킹
  • S - 나이트
  • W - 룩

(x,y)(x, y)는 말의 위치이다 (1≤x,y≤m1 \le x, y \le m). 같은 위치에 두 개 이상의 말이 놓이는 경우는 없다.

출력

nn개의 줄을 출력한다. ii번째 줄에는 입력에서 ii번째 말이 잡는 칸의 개수를 정수 하나로 출력한다.

힌트

위 그림은 예제의 체스판을 나타낸다. 서로 다른 모양의 선은 미끄러지는 말들이 잡는 칸을 나타내며, 큰 점은 나이트가 도달할 수 있는 칸을 나타낸다.

예제1

  1. 예제 1

    입력
    6 5
    K 5 5
    G 4 1
    W 1 3
    K 2 3
    H 2 2
    S 3 3
    
    예상 출력
    3
    2
    4
    5
    7
    7