結果
問題 |
No.243 出席番号(2)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:42:49 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,103 bytes |
コンパイル時間 | 1,064 ms |
コンパイル使用メモリ | 82,180 KB |
実行使用メモリ | 67,180 KB |
最終ジャッジ日時 | 2025-06-12 16:42:55 |
合計ジャッジ時間 | 4,554 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 10 MLE * 20 |
ソースコード
MOD = 10**9 + 7 def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 A = [] for _ in range(N): a = int(input[ptr]) ptr += 1 A.append(a) cnt = [0] * N for a in A: if a < N: cnt[a] += 1 max_s = N dp = [0] * (max_s + 1) dp[0] = 1 for k in range(N): c = cnt[k] for s in range(max_s, -1, -1): if dp[s]: if s + 1 <= max_s: dp[s + 1] = (dp[s + 1] + dp[s] * c) % MOD fact = [1] * (N + 1) for i in range(1, N + 1): fact[i] = fact[i - 1] * i % MOD total = 0 for s in range(0, N + 1): if s % 2 == 0: sign = 1 else: sign = MOD - 1 # represents -1 mod MOD c_s = dp[s] remaining = N - s if remaining < 0: continue term = (sign * c_s) % MOD term = term * fact[remaining] % MOD total = (total + term) % MOD print(total % MOD) if __name__ == '__main__': main()