ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoder-ARC112 A - A - B = C【Python解答例】

AtCoder Regular Contest112に参加しA,B問題ACの2完でした。
この記事ではA問題の解答例を記事にしていきます。
atcoder.jp

AtCoder Regular Contest112 A - B = C

A - B = C

問題文

L 以上 R 以下の整数 A,B,C の組であって、A−B=C を満たすものは何通りありますか?
T 個のケースが与えられるので、それぞれについて答えを求めてください。

制約

・1≤T≤2×10^4
・0≤L≤R≤10^6
・入力はすべて整数

解答例

t = int(input())
i = 0
while i < t:
    i += 1
    l, r = map(int,input().split())
    num = r - 2 * l + 1
    if num < 0:
        print(0)
    else:
        ans = (num * (num + 1)) //2
        print(ans)

解説

問題文の通りL と R が与えられてL 以上R 以下の整数 A,B,C の組であって、A−B=C を満たす組み合わせの数を答えます。
T個のケースが与えられるのでT 回解答する必要があります。

いつもABCではD問題までしか見ていませんが、この問題の入力はAtCoderでは見たことがなかったです。
ケースの数はT で与えられるのでwhile文でケースごとに処理を行いました。

まずA,B,Cの組が存在する条件を考えました。
A - B = CなのでA - B - C = 0 となります。
L , Rを該当箇所に代入するとR - 2L = 0となりますので、RがLの2倍のとき1つの組み合わせがあることがわかりました。
また、R - 2L = 0のとき1通り、R - 2L = 1のとき1 + 2通り、R - 2L = 2のとき1 + 2 + 3通りとなります。

このことからnum変数にR - 2L + 1を代入しました。
numが0より小さい値のときは該当する組み合わせはないので0を出力し、
numが0以上のとき1からnumまでの和をとり、その値ansを出力することでACでした。



ARCになるとA問題から頭を使いました。
ABCで慣れていた入力と違っていたことも大変でしたが、なんとかACをとることができました。
いつもと違うタイプの問題が出てもあわてず対処できるように知識をつけていきたいですね。


ARC112の関連記事はこちら
ebisuke33.hatenablog.com