ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC006 C - スフィンクスのなぞなぞ

C - スフィンクスのなぞなぞ
提出コード
つるかめ算の3つバージョンですね。
まず初めに、全て2本にしても余る(n×2>m)の場合と、全て4本にしても足りない場合(n×4<m)の場合は、答えが-1のパターンとなります。
次に、真ん中、つまり足が3本の老人に注目します。
とりあえず全員が老人だと仮定したときに、目標となるmとのずれを調べます。
もちろん、全て老人だった場合にmと一致する場合は、それが答えとなります。

  • n×3>mの場合
    足を減らす必要があります。差の分だけ、老人を大人に置き換えてあげると、うまくいきます。
    赤ちゃんは0人です。

  • n×3<mの場合
    足を追加する必要があるので、今度は足りない人数だけ老人を赤ちゃんに置き換えてあげると、うまくいきます。
    大人は0人になります。

これによって、O(1)で答えを求めることができます。