0w1

CFR 656 B. Scrambled ( Math, Periodic, Python )

Problem - B - Codeforces

題意:
這是愚人節題,瓶頸貌似是在要花點時間把這稍微被打亂的文章看完。
總之題意就是給 M, R,問 [ 0, ∞ ] 這些整數中,有多少百分比的 d 對任意一個 0 ≤ i < N 滿足 d % M[ i ] = R[ i ]。

資料規模:
N, MAXM, MAXR ≤ 16

解法:
顯然會以 LCM 為單位形成週期。由於數據範圍很小,直接暴力算一個 LCM 內有多少 d 滿足該式即可。
[Python] 內建函式filter, map, reduce | 羅倫斯的IT航海日誌 - 點部落
filter(), map(), reduce()
太潮了
reduce() 在 python3 貌似被搬到 functools 裡去了
這樣改來改去是頗煩的啦
但黑魔法就是這樣吧 甘願

from functools import reduce

def gcd( x, y ):
  return x if y == 0 else gcd( y, x % y )

def lcm( x, y ):
  return x // gcd( x, y ) * y

N = int( input() )
M = list( map( int, input().split() ) )
R = list( map( int, input().split() ) )

d = reduce( lcm, M )
cnt = 0
for i in range( d ):
  qq = False
  for j in range( N ):
    qq |= i % M[ j ] == R[ j ]
  cnt += qq

print( cnt / d )