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

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

단어 2

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

요약
지수 k1..kn이 주어질 때 h_k(0)들을 이어 붙인 문자열이 h_m(0)의 부분 문자열이 되는 최소 m을 구하고, 없으면 NIE를 출력한다.
난이도

어려움10점 중 8점

유형
문자열, 재귀, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

0과 1로만 이루어진 이진 문자열에 작용하는 함수 hh를 정의한다. hh는 문자열의 모든 0을 1로, 모든 1을 두 글자 문자열 10으로 (동시에, 서로 독립적으로) 바꾼다. 예를 들어 hh는 1001을 101110으로 보내고, 빈 문자열은 빈 문자열로 보낸다. hh는 단사(injective) 함수이다. hkh_k는 hh를 kk번 합성한 함수를 뜻하며, h0h_0은 항등함수이므로 h0(w)=wh_0(w) = w이다.

한 글자짜리 문자열 0에 대해 hk(0)h_k(0)을 k=0,1,2,…k = 0, 1, 2, \dots 순서로 나열하면, 이 수열은 다음과 같이 시작한다.

0, 1, 10, 101, 10110, 10110101, ...

문자열 xx가 문자열 yy 안에서 연속한 한 덩어리로 나타나면 xx를 yy의 부분 문자열이라고 한다. 정수 k1,k2,…,knk_1, k_2, \dots, k_n이 주어질 때, 이어 붙인 문자열

hk1(0) hk2(0)⋯hkn(0)h_{k_1}(0)\,h_{k_2}(0)\cdots h_{k_n}(0)

이 어떤 mm에 대해 hm(0)h_m(0)의 부분 문자열이 되는지 판정하고, 된다면 그러한 가장 작은 mm을 구하여라.

입력

첫 번째 줄에 정수 nn (1≤n≤1,000,0001 \le n \le 1{,}000{,}000)이 주어진다. 두 번째 줄에는 nn개의 음이 아닌 정수 k1,k2,…,knk_1, k_2, \dots, k_n (0≤ki≤1090 \le k_i \le 10^9)이 공백 하나로 구분되어 주어진다.

출력

hk1(0) hk2(0)⋯hkn(0)h_{k_1}(0)\,h_{k_2}(0)\cdots h_{k_n}(0)이 hm(0)h_m(0)의 부분 문자열이 되는 가장 작은 음이 아닌 정수 mm을 한 줄에 출력한다. 그러한 mm이 존재하지 않으면 NIE를 출력한다.

예제5

  1. 예제 1

    입력
    2
    1 2
    
    예상 출력
    4
    
  2. 예제 2

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

    입력
    1
    5
    
    예상 출력
    5
    
  4. 예제 4

    입력
    2
    3 2
    
    예상 출력
    4
    
  5. 예제 5

    입력
    2
    2 0
    
    예상 출력
    NIE