結果
問題 |
No.1025 Modular Equation
|
ユーザー |
![]() |
提出日時 | 2025-04-15 22:13:37 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,245 bytes |
コンパイル時間 | 320 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 552,104 KB |
最終ジャッジ日時 | 2025-04-15 22:15:05 |
合計ジャッジ時間 | 8,799 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 6 MLE * 1 -- * 25 |
ソースコード
import sys import math MOD = 10**9 + 7 def main(): p, n, k, b = map(int, sys.stdin.readline().split()) a = list(map(int, sys.stdin.readline().split())) zero_terms = [] non_zero_terms = [] for ai in a: if ai % p == 0: zero_terms.append(ai) else: non_zero_terms.append(ai) m = len(zero_terms) non_zero_cnt = [] d = math.gcd(k, p-1) exponent = (p-1) // d for ai in non_zero_terms: ai_mod = ai % p inv_ai = pow(ai_mod, p-2, p) cnt = [] cnt.append((0, 1)) # v=0, count=1 for v in range(1, p): c = (v * inv_ai) % p if pow(c, exponent, p) == 1: cnt.append((v, d)) non_zero_cnt.append(cnt) dp = [0] * p dp[0] = 1 for cnt in non_zero_cnt: new_dp = [0] * p for s in range(p): if dp[s] == 0: continue for (r, c) in cnt: new_s = (s + r) % p new_dp[new_s] = (new_dp[new_s] + dp[s] * c) % MOD dp = new_dp pow_p_m = pow(p, m, MOD) answer = (dp[b] * pow_p_m) % MOD print(answer) if __name__ == "__main__": main()