結果
問題 | No.2287 ++ -- *=a /=a |
ユーザー |
![]() |
提出日時 | 2023-02-21 22:17:37 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,651 bytes |
コンパイル時間 | 228 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 81,624 KB |
最終ジャッジ日時 | 2024-11-17 19:09:50 |
合計ジャッジ時間 | 8,599 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 24 WA * 3 |
ソースコード
from typing import List, Tupledef solve(x: int, y: int, a: int) -> int:fromX: List[Tuple[int, int]] = []c: int = 0while 0 < x:fromX.append((x, c))x //= ac += 1fromX.append((x, c))dp: List[Tuple[int, int, int]] = [(y, 0, 1e9)]while 1:[i, j, k] = dp[-1]d, r = i // a, i % aif r == 0:dp.append((d,min(j + 1, k + 2),k + a))elif r == a - 1:dp.append((d,j + a,min(j + 2, k + 1)))else:dp.append((d,min(j + r + 1, k + (r + 1) + 1),min(j + (a - r) + 1, k + (a - (r + 1)) + 1)))if i == 0:breakfromY = []for i, j, k in dp:fromY.append((i + 1, k))fromY.append((i, j))def toX(n: int) -> int:return min(map(lambda b: abs(b[0] - n) + b[1], fromX))ans = 1e9if len(fromX) <= 2:for i, j in fromX:ans = min(ans, *map(lambda p: abs(p[0] - i) + p[1] + j, fromY))else:k = 2for i, j in fromY:while i < fromX[k][0] and k + 1 < len(fromX):k += 1ans = min(ans,abs(i - fromX[k - 2][0]) + j + fromX[k - 2][1],abs(i - fromX[k - 1][0]) + j + fromX[k - 1][1],abs(i - fromX[k][0]) + j + fromX[k][1])return ansdef main():T = int(input())for _ in range(T):print(solve(*map(int, input().split())))if __name__ == '__main__':main()