結果
問題 | No.1731 Product of Subsequence |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:12:21 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,343 bytes |
コンパイル時間 | 517 ms |
コンパイル使用メモリ | 82,608 KB |
実行使用メモリ | 100,668 KB |
最終ジャッジ日時 | 2025-03-20 21:14:34 |
合計ジャッジ時間 | 21,704 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 TLE * 2 |
ソースコード
import sysfrom collections import defaultdictMOD = 10**9 + 7def factorize(k):factors = {}i = 2while i * i <= k:while k % i == 0:factors[i] = factors.get(i, 0) + 1k = k // ii += 1if k > 1:factors[k] = 1return sorted(factors.items())def main():input = sys.stdin.read().split()ptr = 0N = int(input[ptr])ptr += 1K = int(input[ptr])ptr += 1A = list(map(int, input[ptr:ptr+N]))if K == 1:print((pow(2, N, MOD) - 1) % MOD)returnfactors = factorize(K)m = len(factors)primes = [p for p, e in factors]required = [e for p, e in factors]# Check if each prime is present in at least one elementhas_prime = [False] * mfor a in A:for i in range(m):p = primes[i]temp = acnt = 0while temp % p == 0 and temp != 0:cnt += 1temp = temp // pif cnt > 0:has_prime[i] = Trueif not all(has_prime):print(0)return# Precompute exponents for each elementexponents_list = []for a in A:exps = []for (p, e) in factors:temp = acnt = 0while temp % p == 0 and temp != 0:cnt += 1temp = temp // pexps.append(cnt)exponents_list.append(exps)# Dynamic programmingdp = defaultdict(int)initial_state = tuple([0]*m)dp[initial_state] = 1for exps in exponents_list:new_dp = defaultdict(int, dp)for state in list(dp.keys()):current_count = dp[state]new_state = list(state)for i in range(m):new_state[i] = min(state[i] + exps[i], required[i])new_state_tuple = tuple(new_state)new_dp[new_state_tuple] = (new_dp[new_state_tuple] + current_count) % MODdp = new_dpresult = 0for state in dp:valid = Truefor i in range(m):if state[i] < required[i]:valid = Falsebreakif valid:result = (result + dp[state]) % MODprint(result % MOD)if __name__ == "__main__":main()