結果
問題 | No.856 増える演算 |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:51:24 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,108 bytes |
コンパイル時間 | 308 ms |
コンパイル使用メモリ | 82,780 KB |
実行使用メモリ | 84,732 KB |
最終ジャッジ日時 | 2025-03-26 15:52:40 |
合計ジャッジ時間 | 10,530 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 WA * 6 RE * 6 TLE * 2 -- * 58 |
ソースコード
MOD = 10**9 + 7def mod_pow(a, b, mod):a %= modresult = 1while b > 0:if b % 2 == 1:result = (result * a) % moda = (a * a) % modb //= 2return resultdef main():import sysinput = sys.stdin.read().split()N = int(input[0])A = list(map(int, input[1:N+1]))# Compute product2: product of A_i^sum_{j>i} A_j mod MODsum_j = [0] * (N + 1)for i in range(N-1, -1, -1):sum_j[i] = (sum_j[i+1] + A[i]) % (MOD-1) # Using MOD-1 for Fermat's little theoremproduct2 = 1for i in range(N):s = sum_j[i+1]if s == 0:continuea = A[i]product2 = (product2 * mod_pow(a, s, MOD)) % MOD# Find the minimum term# Sort the array and check first 200 elementssorted_A = sorted(A)min_term = NoneK = 200for i in range(min(K, len(sorted_A))):for j in range(i+1, min(i+1 + K, len(sorted_A))):a = sorted_A[i]b = sorted_A[j]term = (a + b) * mod_pow(a, b, MOD)if min_term is None or term < min_term:min_term = termoriginal_A = Afor i in range(len(original_A)):for j in range(i+1, len(original_A)):a = original_A[i]b = original_A[j]term = (a + b) * mod_pow(a, b, MOD)if term == min_term:min_val = termbreakelse:continuebreakmin_val_mod = min_val % MODdenominator = min_val_mod# Compute product1 and product2 combinedproduct_total = 1for i in range(len(original_A)):a = original_A[i]for j in range(i+1, len(original_A)):b = original_A[j]term = ((a + b) * mod_pow(a, b, MOD)) % MODproduct_total = (product_total * term) % MOD# Compute inverse of denominatorinv_denominator = mod_pow(denominator, MOD-2, MOD)result = (product_total * inv_denominator) % MODprint(result)if __name__ == '__main__':main()