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

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

버섯 수확

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

요약
격자에 버섯과 스프링클러가 주어질 때, 체비쇼프 거리 D 이내에 스프링클러가 K개 이상 있는 버섯의 수를 센다.
난이도

보통10점 중 6점

유형
누적 합, 행렬, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

게 Crab인 Lim Li는 뒷마당에서 버섯 농장을 운영한다. 그녀의 버섯 농장은 R개의 행과 C개의 열로 이루어진 격자로 나타낼 수 있고, 각 칸은 비어 있거나, 버섯이 있거나, 스프링클러가 있다. 예를 들어 그녀의 버섯 농장은 다음과 같을 수 있다.

그림 1: R = 5, C = 5인 버섯 농장.

스프링클러와 버섯 사이의 거리는 두 축에서의 간격 중 큰 값으로 정의한다. 즉, 버섯이 Xm번째 행 Ym번째 열에 있고 스프링클러가 Xs번째 행 Ys번째 열에 있으면 두 칸 사이의 거리는 max(|Xs − Xm|, |Ys − Ym|)이다. 스프링클러는 사거리가 제한되어 있어 거리가 D 이하인 버섯만 물을 줄 수 있다. 예를 들어 D = 1이면 두 스프링클러가 물을 줄 수 있는 영역은 다음과 같다.

그림 2: 스프링클러의 사거리를 나타낸 그림.

버섯은 충분한 스프링클러가 물을 줘야 자라고 수확할 수 있다. 구체적으로, 버섯에 물을 주는 스프링클러가 K개 이상이면 그 버섯을 수확할 수 있다. Lim Li가 농장에서 수확할 수 있는 버섯의 개수를 세라.

입력

입력의 첫 줄에는 네 정수 R, C, D, K가 주어진다. R은 행의 수, C는 열의 수, D는 스프링클러와 물을 받는 버섯 사이의 최대 거리, K는 버섯을 수확하기 위해 필요한 최소 스프링클러의 수이다.

다음 R개의 줄에는 각각 C개의 문자가 주어지며, 버섯 농장을 나타내는 격자를 이룬다. 각 문자는 해당 칸의 내용을 다음과 같이 나타낸다.

  • '.'는 빈 칸,
  • 'M'은 버섯이 있는 칸,
  • 'S'는 스프링클러가 있는 칸.

출력

Lim Li가 수확할 수 있는 버섯의 최대 개수를 한 줄에 하나의 정수로 출력한다.

제한

  • 2 ≤ RC ≤ 500000,
  • 1 ≤ D ≤ max(R, C),
  • 1 ≤ K ≤ RC,
  • 버섯이 적어도 하나 있다,
  • 스프링클러가 적어도 하나 있다.

예제4

  1. 예제 1

    입력
    5 5 1 1
    ....M
    .M...
    ..S..
    .S...
    ...M.
    
    예상 출력
    1
    
  2. 예제 2

    입력
    4 4 4 1
    ....
    .M..
    ..MM
    ...S
    
    예상 출력
    3
    
  3. 예제 3

    입력
    1 8 5 2
    SM..MM.S
    
    예상 출력
    2
    
  4. 예제 4

    입력
    5 5 2 2
    ....M
    .M...
    ..S..
    .S...
    ...M.
    
    예상 출력
    2