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

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

Bad Wiring

면접 대비

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

요약
각 스위치가 길이 2D+1의 연속 구간을 뒤집을 때, 모든 전등을 끄는 최소 스위치 횟수를 구하거나 불가능을 판정합니다.
난이도

보통10점 중 5점

유형
그리디, 비트 연산
정답자
아직 제출이 없습니다

문제

복도에 전등 nn개가 L1,L2,…,LnL_1, L_2, \ldots, L_n 순서로 한 줄로 놓여 있다. 각 전등은 켜져 있거나 꺼져 있다. 전등 LiL_i마다 스위치 SiS_i가 하나씩 있다.

배선이 잘못되어 있어서, 스위치 SiS_i를 누르면 전등 LiL_i 하나만 바뀌는 것이 아니라 위치 차이가 DD 이하인 모든 전등이 함께 토글된다. 즉 실제로 존재하는 Li−D,…,Li+DL_{i-D}, \ldots, L_{i+D} 가 모두 상태가 반전된다. (토글이란 켜진 전등은 꺼지고, 꺼진 전등은 켜지는 것을 뜻한다.)

예를 들어 S1S_1은 L1,…,LD+1L_1, \ldots, L_{D+1}을 토글하고 SnS_n은 Ln−D,…,LnL_{n-D}, \ldots, L_n을 토글한다. 만약 D≥nD \ge n이면 범위를 벗어나는 전등은 존재하지 않으므로 무시한다.

스위치를 최소 몇 번 눌러 모든 전등을 끌 수 있는지 구하여라. 모든 전등을 끄는 것이 불가능하면 그 사실을 알려라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음 두 줄로 이루어진다.

  • 첫 줄에 두 정수 nn과 DD (1≤n≤1001 \le n \le 100, 0≤D≤150 \le D \le 15)가 주어진다. nn은 전등의 수, DD는 위에서 설명한 범위 값이다.
  • 둘째 줄에 nn개의 정수가 주어진다. ii번째 정수는 전등 LiL_i의 현재 상태이며, 00은 꺼짐, 11은 켜짐을 뜻한다.

출력

각 테스트 케이스마다 한 줄에 정수 하나를 출력한다. 이 값은 모든 전등을 끄기 위해 스위치를 누르는 최소 횟수이다. 모든 전등을 끄는 것이 불가능하면 대신 impossible 을 출력한다.

힌트

n=7n = 7, D=3D = 3 이고 전등 상태가 1 1 1 0 0 0 0 인 경우, 스위치 S4S_4를 누른 뒤 S7S_7을 누르면 모든 전등이 꺼진다.

예제3

  1. 예제 1

    입력
    2
    7 3
    1 1 1 0 0 0 0
    5 1
    1 0 1 0 1
    
    예상 출력
    2
    3
    
  2. 예제 2

    입력
    1
    5 2
    0 0 0 0 0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    2
    4 10
    1 1 1 1
    4 10
    1 1 0 1
    
    예상 출력
    1
    impossible