結果

問題 No.3789 Binary 0-count Sequence
コンテスト
ユーザー Kurao
提出日時 2026-11-06 22:48:42
言語 PyPy3
(8.0.1 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 2,643 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 364 ms
コンパイル使用メモリ 64,412 KB
実行使用メモリ 175,364 KB
最終ジャッジ日時 2026-11-06 22:48:51
合計ジャッジ時間 6,524 ms
ジャッジサーバーID
(参考情報)
judge7_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 8 WA * 9
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys
sys.setrecursionlimit(2*10**7)
#↓codon===============================
import string
Alp_low=list(string.ascii_lowercase)
Alp_up=list(string.ascii_uppercase)
Digit="0123456789"
dij=[[0,1],[1,0],[0,-1],[-1,0]]
def nin():
    """
library
https://github.com/not522/ac-library-python
https://github.com/cheran-senthil/PyRival
https://github.com/kurao2924/Kurao_Py_Library
https://github.com/navel-tos/cp-library-for-codon
    """
    return list(map(int,input().split()))
def deq(x):
    return [i-1 for i in x]
mod=998244353
_factorial=[1]
def factorial(n):
    while len(_factorial)<=n:
        _factorial.append((_factorial[-1]*len(_factorial))%mod)
    return _factorial[n]

_inv_factorial=[1]
def inv_factorial(n):
    while len(_inv_factorial)<=n:
        _inv_factorial.append((_inv_factorial[-1]*pow(len(_inv_factorial),mod-2,mod))%mod)
    return _inv_factorial[n]

def binom(n,r):
    if r>=mod:
        raise ValueError("r is too big")
    if n<0:
        return 0
    if r>n:
        return 0
    if r<0:
        return 0
    ans=((factorial(n)*inv_factorial(r))%mod*inv_factorial(n-r))%mod
    return ans
mod=998244353

def main():
    def f(n):
        if n==0:
            return 1
        return n.bit_length()-n.bit_count()
    t,=nin()
    for _ in range(t):
        n,=nin()
        a=nin()
        if n==1:
            if a[0]==0:
                print(1)
            elif a[0]==1:
                print(0)
            else:
                print(1<<a[0])
        else:
            b=[a[i+1]-a[i]+1 for i in range(n-1)]
            #print(b)
            if min(b)<0:
                print(-1)
                continue
            if b.count(max(b))>1:
                print(-1)
                continue
            if max(b)==0:
                if n==2:
                    if a[0]==1:
                        print(0)
                    else:
                        print(1<<a[0])
                else:
                    print(-1)
                continue
            if min(a)==0:
                l=(1<<max(b)-1)-a.index(max(a))
            else:
                l=(1<<max(b))-b.index(max(b))-1
                #print(l)
                l+=(1<<a[-1]-f(l+n-1)+(l+n-1).bit_length())
                """if a.index(max(a))!=0 or l==1:
                    print("hoge")
                else:
                    l+=(1<<l.bit_length()+min(a))-(1<<l.bit_length()-1)"""
            #print(l)
            x=[a[i]-((l+i).bit_length()-(l+i).bit_count()) for i in range(n)]
            if x==[0]*len(x):
                print(l)
            else:
                print(-1)
            
if __name__=="__main__":
    main()
0