#37918: python 紀錄


BensonDC (python戰士)

學校 : 不指定學校
編號 : 240921
來源 : [1.175.217.87]
最後登入時間 :
2024-03-27 12:33:26
g541. 類題:兔子跳躍(TOIP) -- TOI練習賽202110新手組 | From: [1.175.206.168] | 發表日期 : 2023-10-17 23:10

對於N,M兩數兔子跳的距離,令G,L=gcd(N,M),lcm(N,M)

待詢問數字為T,若T大於等於L且為G的倍數,則YES,若大於等於L且非G的倍數,則NO

對於小於LCM的數,用動態規劃記憶結果,最多只需要記40000次,O(n)完全足夠

from math import gcd
N,M,Q=map(int,input().split())
g=gcd(N,M)
l=N*M//g
L=[int(x) for x in input().split()]
dp=[False]*(l+1)
dp[0]=True
for i in range(1,l+1):
    if i-N<0 and i-M<0:
        continue
    elif i-N>=0:
        if dp[i-N]:
            dp[i]=True
    if i-M>=0:
        if dp[i-M]:
            dp[i]=True
for i in L:
    if i>=l:
        print('YES' if i%g==0 else 'NO')
        continue
    print('YES' if dp[i] else 'NO')

 
ZeroJudge Forum