結果
| 問題 |
No.1546 [Cherry 2nd Tune D] 思ったよりも易しくない
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 18:45:18 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,508 bytes |
| コンパイル時間 | 272 ms |
| コンパイル使用メモリ | 82,164 KB |
| 実行使用メモリ | 126,556 KB |
| 最終ジャッジ日時 | 2025-03-20 18:45:38 |
| 合計ジャッジ時間 | 10,394 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 14 TLE * 1 -- * 38 |
ソースコード
MOD = 998244353
def main():
import sys
input = sys.stdin.read
data = input().split()
N = int(data[0])
entries = []
index = 1
Ts = []
Vs = []
for _ in range(N):
T = int(data[index])
V = int(data[index + 1]) % MOD
Ts.append(T)
Vs.append(V)
index += 2
# Compute M and mod values
M = sum(Ts)
M_mod = M % MOD
M_plus_1_mod = (M + 1) % MOD
# Precompute inverses
inv2 = pow(2, MOD - 2, MOD)
inv6 = pow(6, MOD - 2, MOD)
inv4 = pow(4, MOD - 2, MOD)
ans = 0
current_cum = 0
for i in range(N):
T_i = Ts[i]
V_i = Vs[i]
s = current_cum + 1
e = current_cum + T_i
a = s
b = e
# Compute sum_k from a to b
a1 = (a - 1) % MOD
term1_b = (b % MOD) * ((b + 1) % MOD) % MOD
term1 = term1_b * inv2 % MOD
term2_a = a1 * (a % MOD) % MOD
term2 = term2_a * inv2 % MOD
sumk = (term1 - term2) % MOD
# Compute sum_k^2 from a to b
term1_b_k2 = ((b % MOD) * ((b + 1) % MOD) % MOD) * ((2 * b + 1) % MOD) % MOD
term1_k2 = term1_b_k2 * inv6 % MOD
a_minus_1 = a - 1
a_minus_1_mod = a_minus_1 % MOD
a_mod = a % MOD
two_a_minus_1_plus_1 = (2 * a_minus_1 + 1) % MOD
term2_a_k2 = (a_minus_1_mod * a_mod % MOD) * two_a_minus_1_plus_1 % MOD
term2_k2 = term2_a_k2 * inv6 % MOD
sumk2 = (term1_k2 - term2_k2) % MOD
# Compute sum_k^3 from a to b
b_sq = pow(b, 2, MOD)
b_plus_1_sq = pow(b + 1, 2, MOD)
term1_k3 = (b_sq * b_plus_1_sq) % MOD
term1_k3 = term1_k3 * inv4 % MOD
a_minus_1_sq = pow(a_minus_1, 2, MOD)
a_minus_1_plus_1_sq = pow(a_minus_1 + 1, 2, MOD)
term2_k3 = (a_minus_1_sq * a_minus_1_plus_1_sq) % MOD
term2_k3 = term2_k3 * inv4 % MOD
sumk3 = (term1_k3 - term2_k3) % MOD
# Calculate the terms
term_M = (M_mod * sumk2) % MOD
term_M_plus_1 = (M_plus_1_mod * sumk) % MOD
total = (term_M + term_M_plus_1 - sumk3) % MOD
# Apply the division by 2 (multiply by inv2)
total = total * inv2 % MOD
# Apply Vi
contribution = (total * V_i) % MOD
ans = (ans + contribution) % MOD
current_cum = e
print(ans % MOD)
if __name__ == "__main__":
main()
lam6er