結果
問題 |
No.1080 Strange Squared Score Sum
|
ユーザー |
![]() |
提出日時 | 2025-06-12 17:12:50 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,758 bytes |
コンパイル時間 | 225 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 848,568 KB |
最終ジャッジ日時 | 2025-06-12 17:12:53 |
合計ジャッジ時間 | 3,000 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | MLE * 1 -- * 19 |
ソースコード
MOD = 10**9 + 9 def main(): import sys N = int(sys.stdin.readline().strip()) # Precompute c_a = (a+1)^2 mod MOD for a from 1 to N c = [0] * (N + 2) for a in range(1, N + 1): c[a] = pow(a + 1, 2, MOD) # Precompute factorial and inverse factorial modulo MOD max_m = N fact = [1] * (max_m + 1) for i in range(1, max_m + 1): fact[i] = fact[i - 1] * i % MOD inv_fact = [1] * (max_m + 1) inv_fact[max_m] = pow(fact[max_m], MOD - 2, MOD) for i in range(max_m - 1, -1, -1): inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD # Function to compute the coefficients of S(x)^m up to x^K def compute_Sm(max_m): # S(x) = sum_{a=1}^N c[a] x^a Sm = [ [0]*(N+1) for _ in range(max_m + 1) ] Sm[0][0] = 1 for m in range(1, max_m + 1): for k in range(N, -1, -1): if Sm[m-1][k] == 0: continue for a in range(1, N+1): if k + a > N: continue Sm[m][k + a] = (Sm[m][k + a] + Sm[m-1][k] * c[a]) % MOD return Sm # Compute S^m up to m = N Sm = compute_Sm(N) # Precompute the coefficients for cos(S) + sin(S) f = [0] * (N + 1) f[0] = 1 # cos(0) + sin(0) = 1 for m in range(1, N + 1): sign = 1 if m % 4 == 2 or m % 4 == 3: sign = -1 am = sign * inv_fact[m] for k in range(m, N + 1): f[k] = (f[k] + am * Sm[m][k]) % MOD # Multiply by N! and take modulo N_fact = fact[N] for k in range(1, N + 1): f[k] = f[k] * N_fact % MOD for k in range(1, N + 1): print(f[k] % MOD) if __name__ == '__main__': main()