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

hamayanhamayan's blog

Subscribers [全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019 A]

https://atcoder.jp/contests/nikkei2019-qual/tasks/nikkei2019_qual_a

解説

https://atcoder.jp/contests/nikkei2019-qual/submissions/4096706

両方を購読している人の最大は、なるべく重ねると実現できるので、min(A,B)となる。
 
最小は、なるべく離せばいいのだが、式におこすのが難しい。
A人とB人をなるべく離しておくとA+Bとなる。
これがNに収まれば、両方購読している人は0であるが、収まらないなら、はみ出した分が両方購読する人になる。
なので、A+B-Nが答え。
しかし、これはA+BがNに満たない場合はマイナスになるので、0とのmaxをとっておく。

int N, A, B;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> A >> B;
 
    int ans1 = min(A, B);
    int ans2 = max(0, (A + B) - N);
 
    cout << ans1 << " " << ans2 << endl;
}