結果
問題 |
No.2039 Copy and Avoid
|
ユーザー |
![]() |
提出日時 | 2023-11-10 12:19:34 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 274 ms / 2,000 ms |
コード長 | 773 bytes |
コンパイル時間 | 220 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 74,112 KB |
最終ジャッジ日時 | 2024-09-26 00:46:33 |
合計ジャッジ時間 | 4,340 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
from collections import * def div(n): i = 1 SS = set() while i * i <= n: if n % i == 0: SS.add(i) SS.add(n//i) i += 1 return sorted(list(SS)) N, M, A, B = map(int, input().split()) C = sorted(list(map(int, input().split()))) inf = 10 ** 18 dic = defaultdict(lambda : inf) minv = defaultdict(lambda : inf) dic[1] = 0 D = div(N) K = len(D) for i in range(K): for j in range(M): if C[j] % D[i] == 0: minv[D[i]] = min(minv[D[i]], C[j]) for i in range(1, K): val = inf for j in range(i): if D[i] % D[j] == 0 and minv[D[j]] > D[i]: val = min(val, dic[D[j]] + B * int(i<K-1) + (D[i]//D[j] - 1) * A) dic[D[i]] = val print(dic[N]) if dic[N] != inf else print(-1)