結果
問題 |
No.2860 Heal Slimes
|
ユーザー |
|
提出日時 | 2024-08-25 16:35:54 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 332 ms / 2,000 ms |
コード長 | 1,351 bytes |
コンパイル時間 | 655 ms |
コンパイル使用メモリ | 82,476 KB |
実行使用メモリ | 107,204 KB |
最終ジャッジ日時 | 2024-08-25 16:36:07 |
合計ジャッジ時間 | 11,192 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 60 |
ソースコード
def solve(): n, k, x = map(int, input().split()) H = list(map(int, input().split())) if len(set(h % x for h in H)) != 1: print("No") return H = [h // x for h in H] tot = [0] * k ma = max(H) for i, h in enumerate(H): tot[i % k] += ma - h bef = tot[: n % k] aft = tot[n % k :] if bef and len(set(bef)) != 1: print("No") return if aft and len(set(aft)) != 1: print("No") return if bef and aft: b = bef[0] a = aft[0] d = a - b if d < 0: print("No") return goal = ma + d R = [goal - h for h in H] minus = [0] * n tot = 0 for i in range(n): tot -= minus[i] r = R[i] - tot if r < 0: print("No") return tot += r if i + k < n: minus[i + k] = r else: goal = 1 << 30 R = [goal - h for h in H] minus = [0] * n tot = 0 for i in range(n): tot -= minus[i] r = R[i] - tot if r < 0: print("No") return tot += r if i + k < n: minus[i + k] = r print("Yes") for _ in range(int(input())): solve()