結果
問題 |
No.1330 Multiply or Divide
|
ユーザー |
![]() |
提出日時 | 2025-06-12 13:15:57 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 2,216 bytes |
コンパイル時間 | 388 ms |
コンパイル使用メモリ | 82,284 KB |
実行使用メモリ | 694,188 KB |
最終ジャッジ日時 | 2025-06-12 13:18:25 |
合計ジャッジ時間 | 4,438 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 MLE * 1 -- * 44 |
ソースコード
import sys import heapq def main(): N, M, P = map(int, sys.stdin.readline().split()) A = list(map(int, sys.stdin.readline().split())) decomposed = [] has_b_gt1 = False for a in A: k = 0 while a % P == 0: a //= P k += 1 b = a decomposed.append((k, b)) if b > 1: has_b_gt1 = True if not has_b_gt1: # Check if any P^k_i > M found = False for k, b in decomposed: current = 1 for _ in range(k): current *= P if current > M: break if current > M: found = True break print(1 if found else -1) return # BFS with priority queue heap = [] heapq.heappush(heap, (0, 1)) visited = {1: 0} answer = -1 while heap: steps, r = heapq.heappop(heap) if answer != -1 and steps >= answer: continue if visited.get(r, float('inf')) < steps: continue for k, b in decomposed: new_r = r * b X = new_r * (P ** k) if X > M: if answer == -1 or steps + 1 < answer: answer = steps + 1 continue # Compute s_min s = 0 current = new_r while current <= M and s <= k: current *= P s += 1 if s <= k: total_steps = steps + 1 + (k - s) if answer == -1 or total_steps < answer: answer = total_steps else: if new_r > M: total_steps = steps + 1 + k if answer == -1 or total_steps < answer: answer = total_steps else: if new_r not in visited or steps + 1 + k < visited.get(new_r, float('inf')): visited[new_r] = steps + 1 + k heapq.heappush(heap, (steps + 1 + k, new_r)) print(answer if answer != -1 else -1) if __name__ == "__main__": main()