結果

問題 No.243 出席番号(2)
ユーザー gew1fw
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0