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

hamayanhamayan's blog

Red Blue Teams [CSAcademy #55]

https://csacademy.com/contest/round-55/task/red-blue-teams/

N人の子供がいて、R人は赤、N-R人は青である。
丁度K人の子供の色を最適にswapすることで、赤の子供を最小何人、最大何人にできるか。
子供につきswapが1回ずつとする。
N≦10^5

解法

青の子供をB人とする。(B = N-R)

最小
K≦Rであれば、Rの子供を全てswapするとよい。つまり、R-Kが答え。
そうでないなら、Rの子供を全てswapして、残りの回数でBの子供をswapする。つまり、K-Rが答え。

最大
K≦Bであれば、Bの子供を全てswapするとよい。つまり、R+Kが答え。
そうでないなら、Bの子供を全てswapして、残りの回数でRの子供をswapする。つまり、B+(R-(K-B))が答え。

int N, R, K;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> R >> K;

    int B = N - R;

    int mi, ma;

    if (K <= B) ma = R + K;
    else ma = B + (R - (K - B));

    if (K <= R) mi = R - K;
    else mi = K - R;

    cout << mi << " " << ma << endl;
}