結果
問題 |
No.1025 Modular Equation
|
ユーザー |
![]() |
提出日時 | 2025-06-12 19:04:17 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,865 bytes |
コンパイル時間 | 216 ms |
コンパイル使用メモリ | 82,068 KB |
実行使用メモリ | 440,348 KB |
最終ジャッジ日時 | 2025-06-12 19:04:36 |
合計ジャッジ時間 | 9,196 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 6 TLE * 1 -- * 25 |
ソースコード
MOD = 10**9 + 7 def main(): import sys input = sys.stdin.read().split() ptr = 0 p = int(input[ptr]); ptr +=1 n = int(input[ptr]); ptr +=1 k = int(input[ptr]); ptr +=1 b = int(input[ptr]); ptr +=1 a = list(map(int, input[ptr:ptr+n])) ptr +=n # Precompute f(c) for all c in 0..p-1 f = [0] * p if p == 1: # Edge case, but p >=2 in input pass else: g = 1 if p != 1: g = pow(k, p-2, p-1) g = pow(k, g, p) # Wait, no. Let's compute g = gcd(k, p-1) g_val = gcd(k, p-1) # Compute f(c) f[0] = 1 if p-1 ==0: # p=1, but input p >=2 pass else: e = (p-1) // g_val for c in range(1, p): res = pow(c, e, p) if res ==1: f[c] = g_val else: f[c] =0 # Precompute cnt_i for each a_i cnt_list = [] zero_count =0 for ai in a: if ai ==0: zero_count +=1 continue inv_ai = pow(ai, p-2, p) cnt = [0]*p for v in range(p): c = (v * inv_ai) % p cnt[v] = f[c] cnt_list.append(cnt) # Compute DP dp = [0]*p dp[0] =1 for cnt in cnt_list: new_dp = [0]*p for s in range(p): if dp[s] ==0: continue for v in range(p): if cnt[v] ==0: continue new_s = (s + v) % p new_dp[new_s] = (new_dp[new_s] + dp[s] * cnt[v]) % MOD dp = new_dp # Multiply by p^zero_count mod MOD ans = dp[b] * pow(p, zero_count, MOD) % MOD print(ans) def gcd(a, b): while b: a, b = b, a%b return a if __name__ == '__main__': main()