Skip to content

toona note

Atcoder Regular Contest 112 B - -- - B WAからの脱却

初手の発想

ARC112_B

まず、「操作 1: -1 倍する」と「操作 2: 1 を引く」の組み合わせとして意味のある操作数は少ないのではないかと考えました。
例えば、操作 1 を 2 回続けて行うのは明らかに意味がありません。また、操作 1・操作 2・操作 1・操作 2 の順番で行うことも意味がありません。

しかし、上の考え方では、うまくまとめ上げられませんでした。
そこで、考え方を変えて、作れる数字を考えてみると、ある一定の範囲に収まっていることに気が付きました。
つまり、作れる数字の上限と下限を求めればよい。 ただし、作れる数字の範囲は操作 1 の-1 倍により重複を許す 2 つのグループであることに注意しなければなりません。

提出コード

こらのコードでは全然突破できません。

間違い

このコードの間違いは、 16 ~ 20 行目の floor です。
long long 型を用いているので floor ではなく、floorl としないといけません。

floor を修正した上記コードは AC します。

標準ライブラリなのに、 long long 型くらいサポートしてないのか?
驚き。 python 使いとしては、すごく不親切な言語に思えます。

教訓

long long 型での floor は floor ではなくて floorl を使用しましょう。