結果

問題 No.2039 Copy and Avoid
ユーザー ニックネームニックネーム
提出日時 2022-08-12 23:25:33
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
TLE  
実行時間 -
コード長 637 bytes
コンパイル時間 308 ms
コンパイル使用メモリ 11,784 KB
実行使用メモリ 19,444 KB
最終ジャッジ日時 2023-10-24 11:46:09
合計ジャッジ時間 6,869 ms
ジャッジサーバーID
(参考情報)
judge14 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 -- -
testcase_02 -- -
testcase_03 -- -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
testcase_24 -- -
testcase_25 -- -
testcase_26 -- -
testcase_27 -- -
testcase_28 -- -
testcase_29 -- -
testcase_30 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

from math import isqrt
from functools import lru_cache
n, m, a, b = map(int, input().split())
c = sorted(map(int, input().split()))
d = set()
for i in range(1, isqrt(n)+1):
    if n%i == 0: d.add(i); d.add(n//i)
d = sorted(d)
@lru_cache
def main(n):
    if n == 1: return -b
    ans = 10**18
    for v in d:
        if v >= n: break
        if n%v != 0: continue
        flag = True
        for w in c:
            if w > n: break
            if w%v == 0: flag = False; break
        if not flag: continue
        res = main(v)
        if res != -1: ans = min(ans, res+b+(n-v)//v*a)
    return ans if ans != 10**18 else -1
print(main(n))
0