結果
問題 |
No.3051 Make All Divisible
|
ユーザー |
|
提出日時 | 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 |
ソースコード
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))