結果

問題 No.856 増える演算
ユーザー gew1fw
提出日時 2025-06-12 19:30:35
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,097 bytes
コンパイル時間 190 ms
コンパイル使用メモリ 82,324 KB
実行使用メモリ 83,276 KB
最終ジャッジ日時 2025-06-12 19:31:14
合計ジャッジ時間 32,868 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 36 WA * 13 TLE * 2 -- * 29
権限があれば一括ダウンロードができます

ソースコード

diff #

MOD = 10**9 + 7

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    N = int(data[0])
    A = list(map(int, data[1:N+1]))
    
    A_sorted = sorted(A)
    
    min_A = A_sorted[0]
    count_min = A_sorted.count(min_A)
    
    if count_min >= 2:
        min_T = (2 * min_A) * pow(min_A, min_A, MOD)
        min_T %= MOD
    else:
        s_min = A_sorted[1]
        min_T = (min_A + s_min) * pow(min_A, s_min, MOD)
        min_T %= MOD
    
    prefix_sum = [0] * (N + 1)
    for i in range(N):
        prefix_sum[i+1] = prefix_sum[i] + A[i]
    total_sum = prefix_sum[N]
    
    P2 = 1
    for i in range(N):
        S_i = total_sum - prefix_sum[i+1]
        exponent = S_i % (MOD-1)
        term = pow(A[i], exponent, MOD)
        P2 = (P2 * term) % MOD
    
    P1 = 1
    for i in range(N):
        for j in range(i + 1, N):
            term = (A[i] + A[j]) % MOD
            P1 = (P1 * term) % MOD
    
    P = (P1 * P2) % MOD
    
    inv_min_T = pow(min_T, MOD-2, MOD)
    M = (P * inv_min_T) % MOD
    
    print(M)

if __name__ == "__main__":
    main()
0