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<long long> ではなくて floorl を使用しましょう。

コメント

タイトルとURLをコピーしました