結果
| 問題 | No.3051 Make All Divisible |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-03-22 04:26:08 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,096 bytes |
| 記録 | |
| コンパイル時間 | 168 ms |
| コンパイル使用メモリ | 85,120 KB |
| 実行使用メモリ | 66,304 KB |
| 最終ジャッジ日時 | 2026-03-22 04:26:13 |
| 合計ジャッジ時間 | 2,400 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 14 WA * 18 |
ソースコード
# https://yukicoder.me/problems/no/3051
def solve(N, K, A):
sum_a = sum(A)
if sum_a % K != 0:
return -1
if K == 1:
return 0
v = 0
max_a = 0
for a in A:
max_a = max(max_a, a % K)
v += a % K
v //= K
if v >= max_a:
return v
array1 = []
array2 = []
array3 = []
for a in A:
array1.append(a // K)
array2.append(a % K)
if array1[-1] > 0:
array3.append(True)
else:
array3.append(False)
n0 = 0
for i in range(N):
if array1[i] > 0:
n0 += 1
while n0 > K:
a = float("inf")
for i in range(N):
if array3[i]:
a = min(a, array1[i])
l = (max_a - v) // (n0 - K)
l += 1 if (max_a - v) % (n0 - K) else 0
if a < l:
for i in range(N):
if array3[i]:
array1[i] -= a
if array1[i] == 0:
array3[i] = False
n0 -= 1
for i in range(N):
if array3[i]:
array2[i] += a * K
max_a += a * K
v += a * n0
else:
max_a += (l - 1) * K
v += (l - 1) * n0
for _ in range(n0):
target_id = -1
min_ = float("inf")
for i in range(N):
if array2[i] < min_:
min_ = array2[i]
target_id = i
max_a = max(max_a, array2[target_id] + K)
v += 1
array2[target_id] -= 1
if v >= max_a:
return v
return -1
def main():
T = int(input())
answers = []
for _ in range(T):
N, K = map(int, input().split())
A = list(map(int, input().split()))
ans = solve(N, K, A)
answers.append(ans)
for ans in answers:
print(ans)
if __name__ == "__main__":
main()