はまやんはまやんはまやん

hamayanhamayan's blog

商店街へのお出かけ [パソコン甲子園2020 予選 B]

https://onlinejudge.u-aizu.ac.jp/challenges/sources/PCK/Prelim/0429

解説

https://onlinejudge.u-aizu.ac.jp/solutions/problem/0429/review/5787654/hamayanhamayan/C++14

与えられた判定問題を実装していく、実装問題となる。
条件をプログラムに落とすときに、色々混乱してしまうかもしれないので、そういう場合は変数に分かりやすい
名前を付けたりしてまとめていこう。

答えは条件にあるように4パターンを条件分岐で実装してもいいのだが、少し技ありな実装を自分は行っている。
ちょうど二人ともたどり着けるとき3は1+2となっているので、ヤエちゃんがたどりつけるなら答えを+1,
タケコちゃんがたどりつけるなら答えを+2とすることで、条件を満たす。
こうすることで4パターンに分岐させるよりもやや良い感じになる。

これ以降は補足だが、この部分はプログラミングではフラグ操作とも呼ばれる。
ビット操作とも言ったりするが、下位1ビットがヤエちゃんがたどり着けるかのビットになっており、
下位2ビットがタケコちゃんがたどり着けるかのビットになっている。
競技プログラミングをやっていくにあたってビット操作を意識する場面があったりするので、
そういう観点でも考えてみるといいと思う。

int w, m, s;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> w >> m >> s;

    int yae2Joe = s;
    int takeko2Joe = w - s;

    int ans = 0;
    if (yae2Joe <= m) ans += 1;
    if (takeko2Joe <= m) ans += 2;
    cout << ans << endl;
}