💨
AtCoder ARC112 個人的メモ
所感
AB2完
A問題とB問題の問題名ちょっと笑った
A - B = C
数列
よって,等差数列の和の公式を用いれば,解が各ケース当たり
T = int(input())
for _ in range(T):
L, R = map(int, input().split())
res = max(0, R - 2 * L + 1)
print(res * (res + 1) // 2)
B - -- - B
数直線を描いて,場合分け
制約より
-
の場合B=0
に0 を掛けても-1 なので,0 の初期値はans 1 -
の場合B\neq 0
にB を掛けると正負反転するので,(-1) の初期値はans 2
続きは明日書くかも
B, C = map(int, input().split())
if B == 0:
ans = 1
# 減算のみ
ans += C // 2
# 減算後,最後に(-1)を一回掛ける
ans += (C - 1) // 2
else:
ans = 2
if B > 0:
# 減算のみ
ans += min(C // 2, B)
# 減算後,最後に(-1)を一回掛ける
ans += min((C - 1) // 2, B - 1)
# 最初に(-1)を一回掛けた後,減算
ans += (C - 1) // 2
# 最初に(-1)を一回掛けた後,減算,その後再び(-1)を掛ける
ans += max(0, C - 2) // 2
else:
# 減算のみ
ans += C // 2
# 最初に(-1)を一回掛けた後,減算
ans += min((C - 1) // 2, (abs(B) - 1) * 2 + 1)
# 減算後,最後に(-1)を一回掛ける
ans += (C - 1) // 2
print(ans)
Discussion