結果

問題 No.3051 Make All Divisible
ユーザー tassei903
提出日時 2025-03-07 23:19:43
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,755 bytes
コンパイル時間 664 ms
コンパイル使用メモリ 82,792 KB
実行使用メモリ 84,896 KB
最終ジャッジ日時 2025-03-07 23:19:54
合計ジャッジ時間 11,101 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 2 WA * 19 TLE * 1 -- * 9
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################


def naive(n, k, a):
    def check(r):
        z = 0
        y = 0
        for i in range(n):
            if a[i] % k > r:
                return False
            z += a[i] % k
            z += (min(a[i], r) - a[i] % k) // k * k
        return z >= r * k

    for i in range(10 ** 9):
        if check(i):
            return i


def solve(n, k, a):

    if sum(a) % k:
        return -1
    
    def check(r):
        z = 0
        y = 0
        for i in range(n):
            if a[i] % k > r:
                return False
            z += a[i] % k
            z += (min(a[i], r) - a[i] % k) // k * k
        return z >= r * k
    ans = inf
    last = 0
    for i in range(n):
        for j in range(k):
            l = last + j
            s = (a[i] - last - j - 1) // k + 1
            # [l, l + s * k)
            if (not check(l + (s-1) * k)) or s <= 0:
                continue
            ok = s - 1
            ng = -1
            while abs(ok - ng) > 1:
                mid = (ok + ng ) // 2
                if check(l + mid * k):
                    ok = mid
                else:
                    ng = mid
            # print(i, l, s, ok)
            ans = min(ans, l + ok * k)
        if ans != inf:
            break
        last = a[i]
    
    return ans

inf = 10 ** 18
for _ in range(ni()):
    n, k = na()
    a = sorted(na())
    print(solve(n, k, a))
    # print(naive(n, k, a))
0