結果
| 問題 |
No.546 オンリー・ワン
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-07-01 17:22:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 61 ms / 2,000 ms |
| コード長 | 1,202 bytes |
| コンパイル時間 | 145 ms |
| コンパイル使用メモリ | 82,664 KB |
| 実行使用メモリ | 67,456 KB |
| 最終ジャッジ日時 | 2024-06-28 06:13:01 |
| 合計ジャッジ時間 | 1,416 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 7 |
ソースコード
import sys
import math
from collections import defaultdict
from collections import deque
sys.setrecursionlimit(1000000)
MOD = 10 ** 9 + 7
input = lambda: sys.stdin.readline().strip()
NI = lambda: int(input())
NMI = lambda: map(int, input().split())
NLI = lambda: list(NMI())
SI = lambda: input()
def zeta(A):
"""
高速ゼータ変換 和集合のリストから積集合のリストへ変換など
"""
n = len(A)
def mobius(n, dp):
"""
高速メビウス変換 積集合のリストから和集合のリストへ変換など
"""
dp = dp.copy()
dp[0] = 0
for j in range(n):
bit = 1<<j
for i in range(1<<n):
if i & bit == 0:
dp[i] -= dp[i | bit]
return dp
def lcm(a, b):
return a*b // math.gcd(a, b)
def main():
N, L, H = NMI()
C = NLI()
nums = [0]*(1<<N)
for case in range(1<<N):
div = 1
for i in range(N):
if (case>>i) & 1:
div = lcm(div, C[i])
nums[case] = H // div - (L-1) // div
mob = mobius(N, nums)
ans = 0
for i in range(N):
ans += mob[1<<i]
print(ans)
if __name__ == "__main__":
main()