메뉴 건너뛰기

문제


시간메모리제출 회통과 회비율
1초64MB
0
0
0.0%
나의 횟수나의 판정시도 명성공 명비율
00
0.0%
문제

KOI 마을에는 일직선 형태의 도로가 있다. 이 도로 위에는 \(N\)개의 집이 있고, 1번부터 \(N\)번까지 번호가 부여된 \(N\)명의 학생이 한 집에 한 명씩 살고 있다. \(i\) (\(1 \le i \le N\))번 학생이 살고 있는 집의 좌표는 \(i\)이다. 즉, 1번 학생이 살고 있는 집의 좌표는 1, 2번 학생이 살고 있는 집의 좌표는 2이다.

KOI 마을에는 학교가 두 곳 있다. 이를 각각 1번 학교와 2번 학교라고 하자. 각 학생은 두 학교 중 정확히 한 학교에 다닌다.

\(i\)번 학생과 \(j\)번 학생에 대해 (\(i \ne j\)), 아래의 조건 중 적어도 하나를 만족하면, 두 학생은 서로 이웃이라고 한다.

  • 두 학생이 서로 같은 학교에 다니고, 두 학생의 집 사이의 거리가 \(K_1\) 이하이다.
  • 두 학생이 서로 다른 학교에 다니고, 두 학생의 집 사이의 거리가 \(K_2\) 이하이다.

여기서, 서로 다른 두 집 사이의 거리란 두 집의 좌표 중 큰 값에서 작은 값을 뺀 값으로 정의한다. 예를 들어, 3번 학생이 사는 집과 5번 학생이 사는 집 사이의 거리는 \(5 - 3 = 2\)이다.

각 학생에 대해, 그 학생과 서로 이웃인 학생의 수를 계산하는 프로그램을 작성하라. 자기 자신은 자신의 이웃이 아님에 유의하라.

 

부분 문제

  1. (5점) \(N = 2\)
  2. (25점) \(K_1 = K_2 = 1\)
  3. (35점) \(S_1 = S_2 = \cdots = S_N = 1\)
  4. (35점) 추가 제약 조건 없음.
입력

첫 줄에 세 정수 \(N, K_1, K_2\)가 공백으로 구분되어 차례대로 주어진다.

그 다음 줄에 \(N\)개의 정수 \(S_1, S_2, \dots, S_N\)이 공백으로 구분되어 차례대로 주어진다. 여기서, \(S_i\)는 \(i\)번 학생이 다니는 학교의 번호를 나타낸다 (\(1 \le i \le N\)).

제약 조건

  • 주어지는 모든 수는 정수이다.
  • \(2 \le N \le 3000\)
  • \(1 \le K_1, K_2 \le N - 1\)
  • 정수 \(i\) (\(1 \le i \le N\))에 대하여 \(1 \le S_i \le 2\)
출력

첫 줄에 \(N\)개의 정수를 공백으로 구분하여 출력한다. 이 중 \(i\)번째 정수는 \(i\)번 학생과 서로 이웃인 학생의 수를 의미한다 (\(1 \le i \le N\)).

예시 1
입력
5 1 2 1 1 1 2 2
출력
1 3 3 3 2
예시 2
입력
5 1 1 1 1 1 2 2
출력
1 2 2 2 1
예시 3
입력
7 3 1 1 1 1 1 1 1 1
출력
3 4 5 6 5 4 3
위로