結果
| 問題 | No.2001 Distanced Triple |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-18 01:11:25 |
| 言語 | PyPy3 (8.0.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 34 ms / 2,000 ms |
| + 214µs | |
| コード長 | 3,263 bytes |
| 記録 | |
| コンパイル時間 | 87 ms |
| コンパイル使用メモリ | 64,872 KB |
| 実行使用メモリ | 53,848 KB |
| 最終ジャッジ日時 | 2026-10-18 01:11:50 |
| 合計ジャッジ時間 | 3,637 ms |
|
ジャッジサーバーID (参考情報) |
judge6_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
## https://yukicoder.me/problems/no/2001
MOD = 998244353
def sum_x2(R):
ans = (R * (R + 1)) % MOD
ans *= (2 * R + 1) % MOD
ans %= MOD
ans *= pow(6, MOD -2, MOD)
ans %= MOD
return ans
def sum_x1(R):
ans = (R * (R + 1)) % MOD
ans *= pow(2, MOD -2, MOD)
ans %= MOD
return ans
def sum_interval_x2(L, R):
return (sum_x2(R) - sum_x2(L - 1) ) % MOD
def sum_interval_x1(L, R):
return (sum_x1(R) - sum_x1(L - 1) ) % MOD
def sum_interval_x0(L, R):
return (R - L + 1) % MOD
def case1(L, R, r, A, B, C):
a1 = ((R + 1 - B) * (R - C)) % MOD
a1 *= sum_interval_x0(L, r)
a1 %= MOD
a2 = -(R + 1 - B)
a2 *= sum_interval_x1(L, r)
a2 %= MOD
a3 = ((R - B) * (R - B + 1)) % MOD
a3 *= pow(2, MOD - 2, MOD)
a3 %= MOD
a3 *= -1
a3 %= MOD
a3 *= sum_interval_x0(L, r)
a3 %= MOD
a4 = pow(2, MOD -2 , MOD)
a4 *= sum_interval_x2(L, r)
a4 %= MOD
a5 = ((2 * C - 2 * B + 1) * pow(2, MOD - 2, MOD)) % MOD
a5 *= sum_interval_x1(L, r)
a5 %= MOD
a6 = ((C - B) * (C - B + 1)) % MOD
a6 *= pow(2, MOD -2, MOD)
a6 %= MOD
a6 *= sum_interval_x0(L, r)
a6 %= MOD
a7 = ((C - B - A + 1) * (R - C + 1)) % MOD
a7 *= sum_interval_x0(L, r)
a7 %= MOD
a8 = ((C - B - A + 1) * (-1)) % MOD
a8 *= sum_interval_x1(L, r)
a8 %= MOD
answer = 0
answer += a1
answer %= MOD
answer += a2
answer %= MOD
answer += a3
answer %= MOD
answer += a4
answer %= MOD
answer += a5
answer %= MOD
answer += a6
answer %= MOD
answer += a7
answer %= MOD
answer += a8
answer %= MOD
print(answer)
def case2(L, R, r, A, B, C):
a1 = ((R + 1 - B) * (R - B - A + 1)) % MOD
a1 *= sum_interval_x0(L, r)
a1 %= MOD
a2 = -(R + 1 - B)
a2 *= sum_interval_x1(L, r)
a2 %= MOD
a3 = ((R - B) * (R - B + 1)) % MOD
a3 *= pow(2, MOD - 2, MOD)
a3 %= MOD
a3 *= -1
a3 %= MOD
a3 *= sum_interval_x0(L, r)
a3 %= MOD
a4 = pow(2, MOD -2 , MOD)
a4 *= sum_interval_x2(L, r)
a4 %= MOD
a5 = ((2 * A - 1) * pow(2, MOD - 2, MOD)) % MOD
a5 *= sum_interval_x1(L, r)
a5 %= MOD
a6 = (A * (A - 1)) % MOD
a6 *= pow(2, MOD -2, MOD)
a6 %= MOD
a6 *= sum_interval_x0(L, r)
a6 %= MOD
answer = 0
answer += a1
answer %= MOD
answer += a2
answer %= MOD
answer += a3
answer %= MOD
answer += a4
answer %= MOD
answer += a5
answer %= MOD
answer += a6
answer %= MOD
print(answer)
def solve(L, R, A, B, C):
r = R - max(A + B, C)
if L > r:
print(0)
return
if C - B - A >= 0:
case1(L, R, r, A, B, C)
else:
case2(L, R, r, A, B, C)
def solve2(L, R, A, B, C):
answer = 0
for x in range(L, R + 1):
if x + A <= R:
for y in range(x + A, R + 1):
if max(x + C, y + B) <= R:
z0 = max(x + C, y + B)
answer += R - z0 + 1
answer %= MOD
print(answer)
def main():
L, R = map(int, input().split())
A, B, C = map(int, input().split())
solve(L, R, A, B, C)
# solve2(L, R, A, B, C)
if __name__ == "__main__":
main()