만드는 중입니다

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

비트 개수 수열

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

요약
길이 n의 수열 a가 주어질 때, x부터 x+n-1까지 각 수의 이진수 1의 개수가 a와 같아지는 가장 작은 음이 아닌 정수 x를 구하고, 없으면 -1을 출력합니다.
난이도

어려움10점 중 9점

유형
비트 연산, 수학, 구현
정답자
아직 제출이 없습니다

문제

음이 아닌 정수 xx에 대해, p(x)p(x)를 xx의 이진 표현에서 1의 개수라고 하자. 예를 들어 26=(11010)226 = (11010)_2이므로 p(26)=3p(26) = 3이다.

정수 수열 (a1,a2,…,an)(a_1, a_2, \dots, a_n)이 주어진다. (p(x),p(x+1),…,p(x+n−1))(p(x), p(x+1), \dots, p(x+n-1))이 (a1,a2,…,an)(a_1, a_2, \dots, a_n)과 같아지는 음이 아닌 정수 xx가 존재하는지 판별하라. 존재한다면 그 조건을 만족하는 가장 작은 xx를 구하라.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤10001 \le t \le 1000)가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

첫 줄에 정수 nn (1≤n≤5000001 \le n \le 500000)이 주어진다. 둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n (0≤ai≤600 \le a_i \le 60)이 주어진다.

모든 테스트 케이스에 걸친 nn의 합은 500000을 넘지 않는다.

출력

각 테스트 케이스에 대해, 조건을 만족하는 가장 작은 음이 아닌 정수 xx를 출력한다. 그러한 xx가 없다면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    4
    5
    3 3 4 1 2
    3
    2 1 2
    2
    60 60
    2
    8 0
    
    예상 출력
    13
    3
    2305843009213693949
    -1