SSHS 프로토콜

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

요약
이진 문자열을 짝수 길이 블록으로 나눠 각 블록 두 반쪽의 이진값 곱의 합을 최소로 만든다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 수학, 조합론
정답자
아직 제출이 없습니다

문제

SSHS 프로토콜은 00과 11로만 구성된 짝수 길이의 데이터를 전송할 수 있는 프로토콜이다. SSHS 프로토콜을 사용하여 데이터를 전송할 때 청구되는 비용은 다음과 같다.

  • 전송하려고 하는 데이터를 00과 11로 구성된 길이 2k2k의 수열 TT라고 하자. (단, k≥1k \ge 1)
  • 청구 비용은 (∑_i=1kT_i2k−i)×(∑_i=k+12kT_i22k−i)\left( \sum\_{i=1}^{k} T\_i2^{k-i} \right) \times \left( \sum\_{i=k+1}^{2k} T\_i2^{2k-i} \right)이다.
  • 즉, TT를 절반으로 자른 후 각각을 이진법 표기로 생각했을 때의 값의 곱만큼 비용이 청구된다.

SSHS 프로토콜을 사용할 때는 데이터의 길이가 길수록 청구되는 비용이 기하급수적으로 증가하기 때문에 데이터를 분할하여 전송하는 경우가 많다. 데이터를 분할하여 전송할 경우, 전체 청구 비용은 분할된 데이터의 청구 비용의 합이다. 길이 NN의 데이터 SS가 주어졌을 때, 전체 청구 비용의 최솟값을 구하여라.

엄밀한 설명은 다음과 같다:

  • 데이터 TT의 청구 비용을 f(T)f(T)라고 정의하자.
  • 00과 11로 구성된 길이 NN의 데이터 SS가 주어진다. (단, NN은 짝수)
  • 1=i_0<i_1<i_2<⋯<i_p<i_p+1=N+11 = i\_0 < i\_1 < i\_2 < \cdots < i\_p < i\_{p+1} = N+1, 0≤j≤p0 \le j \le p인 모든 정수 jj에 대해 i_j+1−i_ji\_{j+1}-i\_j가 짝수인 pp개의 정수 i_1,i_2,⋯ ,i_pi\_1, i\_2, \cdots, i\_p를 선택한다. (단, pp는 00 이상의 정수)
  • 이때, 전체 청구 비용 g(i_1,i_2,⋯ ,i_p)=∑_j=0pf(S_i_j:(i_j+1−1))g(\\{ i\_1, i\_2, \cdots, i\_p \\}) = \sum\_{j=0}^{p} f(S\_{i\_j : (i\_{j+1}-1)})이다. (s_l:rs\_{l : r}은 ss의 부분수열 (s_l,s_l+1,⋯ ,s_r)(s\_l, s\_{l+1}, \cdots, s\_r)를 나타낸다.)
  • 전체 청구 비용 gg의 최솟값을 구하여라.

데이터를 분할하지 않고 원본 그대로 전송하는 것도 가능함에 유의하자. 즉, g(∅)=f(S)g(\emptyset)=f(S)의 비용으로 SS를 전송할 수 있다.

입력

첫 번째 줄에 데이터의 길이 NN이 주어진다.

두 번째 줄에 00과 11로 구성된 길이 NN의 데이터 SS가 공백 없이 주어진다.

출력

SS를 보낼 때 전체 청구 비용의 최솟값을 출력한다.

제한

  • 2≤N≤2×1052 \le N \le 2 \times 10^5
  • NN은 짝수

예제3

  1. 예제 1

    입력
    8
    10110101
    
    예상 출력
    1
    
  2. 예제 2

    입력
    8
    11100110
    
    예상 출력
    1
    
  3. 예제 3

    입력
    8
    00001111
    
    예상 출력
    0