結果
| 問題 | No.829 成長関数インフレ中 | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-03-26 15:59:18 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,749 bytes | 
| コンパイル時間 | 362 ms | 
| コンパイル使用メモリ | 82,588 KB | 
| 実行使用メモリ | 135,420 KB | 
| 最終ジャッジ日時 | 2025-03-26 16:00:23 | 
| 合計ジャッジ時間 | 4,089 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 20 WA * 2 | 
ソースコード
MOD = 10**9 + 7
def main():
    import sys
    from collections import defaultdict
    N, B = map(int, sys.stdin.readline().split())
    S = list(map(int, sys.stdin.readline().split()))
    
    # Count frequency of each value
    freq = defaultdict(int)
    for s in S:
        freq[s] += 1
    
    # Sort the unique values in descending order and create groups
    sorted_values = sorted(freq.keys(), reverse=True)
    groups = []
    for v in sorted_values:
        groups.append((v, freq[v]))
    M = len(groups)
    
    # Precompute factorial mod MOD
    fact = [1] * (N + 1)
    for i in range(1, N + 1):
        fact[i] = fact[i-1] * i % MOD
    
    # Precompute k for each group (sum of m_j for groups before i)
    k_list = []
    total = 0
    for i in range(M):
        k_list.append(total)
        total += groups[i][1]
    
    # Compute p_i and term_i for each group
    p = []
    term = []
    for i in range(M):
        v, m = groups[i]
        k = k_list[i]
        denom = k + m
        inv_denom = pow(denom, MOD-2, MOD)
        pi = m * inv_denom % MOD
        p.append(pi)
        term_i = (1 - pi + pi * B) % MOD
        term.append(term_i)
    
    # Compute T = product of term_i
    T = 1
    for t in term:
        T = T * t % MOD
    
    # Compute sum_contrib = sum(p_i * T * inv(term_i) for each i)
    sum_contrib = 0
    for i in range(M):
        ti = term[i]
        inv_ti = pow(ti, MOD-2, MOD)
        contrib = p[i] * T % MOD
        contrib = contrib * inv_ti % MOD
        sum_contrib = (sum_contrib + contrib) % MOD
    
    # Calculate the final score
    B_mod = B % MOD
    score = (B_mod * sum_contrib) % MOD
    score = (score * fact[N]) % MOD
    print(score)
if __name__ == "__main__":
    main()
            
            
            
        