結果

問題 No.3051 Make All Divisible
ユーザー titia
提出日時 2025-03-09 01:59:34
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 695 ms / 2,000 ms
コード長 1,298 bytes
コンパイル時間 618 ms
コンパイル使用メモリ 82,400 KB
実行使用メモリ 80,140 KB
最終ジャッジ日時 2025-06-20 02:27:00
合計ジャッジ時間 5,078 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = sys.stdin.readline

from heapq import heappop,heappush

T=int(input())

for tests in range(T):
    n,k=map(int,input().split())
    A=list(map(int,input().split()))

    SUM=sum(A)

    if SUM%k!=0:
        print(-1)
        continue

    flag=1
    for a in A:
        if a%k!=0:
            flag=0
            break

    if flag:
        print(0)
        continue

    A2=[]
    for a in A:
        if a!=0:
            A2.append(a)

    A=A2
    n=len(A)

    if n<k:
        print(-1)
        continue

    if n==k:
        B=[a%k for a in A]
        x=B[0]

        flag=1

        for b in B:
            if x!=b:
                flag=0
                break

        if flag:
            print(x)
        else:
            print(-1)
        continue

    B=[]
    C=[]
    SUM=0
    MAX=0

    for a in A:
        if a>=k:
            B.append((a%k,a//k))
        else:
            C.append(a)

        SUM+=a%k
        MAX=max(MAX,a%k)

    if MAX<=SUM//k:
        print(SUM//k)
        continue

    B.sort()

    ANS=-1

    while B:
        x,com=heappop(B)
        if com==0:
            continue

        MAX=max(MAX,x+k)
        SUM+=k
        heappush(B,(x+k,com-1))

        if MAX<=SUM//k:
            ANS=SUM//k
            break

    print(ANS)
        

    
0