만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

좋은 문자열 만들기

시간 제한2초메모리 제한1024 MB

요약
이진 문자열의 문자를 뒤집어 모든 0을 덮는 최소 구간과 모든 1을 덮는 최소 구간의 길이가 같아지게 하는 최소 비용을 구합니다.
난이도

어려움10점 중 8점

유형
누적 합, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

00과 11로 이루어진 길이 nn의 이진 문자열 a_1a_2...a_na\_1a\_2...a\_n이 주어진다. 비용 11을 들여 문자 하나를 다른 문자로 바꿀 수 있다.

좋은 이진 문자열은 다음 조건을 모두 만족하는 문자열이다.

  • 00과 11을 적어도 하나씩 포함한다.
  • 00을 포함하는 구간의 최소 길이는 11을 포함하는 구간의 최소 길이와 같다. 구간 [ss, ee]가 jj를 포함한다는 것은 ai=ja_i=j인 모든 ii에 대해 s≤i≤es \leq i \leq e가 성립한다는 뜻이다. (1≤i≤n1 \leq i \leq n, j=0j=0, 11) 구간 [ss, ee]의 길이는 e−se-s로 정의한다.

주어진 문자열을 좋은 이진 문자열로 만드는 데 필요한 최소 비용을 구한다.

입력

첫째 줄에 테스트케이스의 개수 TT가 주어진다. (1≤T≤1031 \leq T \leq 10^3)

각 테스트케이스는 다음과 같이 구성된다.

첫째 줄에 이진 문자열의 길이 nn이 주어진다. (1≤n≤1061 \leq n \leq 10^6)

다음 줄에 00과 11로 이루어진 길이 nn의 문자열이 주어진다.

모든 테스트케이스에 대해 nn의 합이 10610^6 이하임이 보장된다.

출력

각 테스트케이스에 대해 주어진 문자열을 좋은 이진 문자열로 만들 수 없으면 −1-1을 출력한다. 만들 수 있으면 좋은 이진 문자열로 만들기 위한 최소 비용을 출력한다.

예제1

  1. 예제 1

    입력
    3
    6
    100100
    5
    10010
    1
    0
    
    예상 출력
    1
    0
    -1