zuka
ABCをコツコツ解いていきます。
本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。
これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。
目次
本記事の概要
Atcoderで初心者用のコンテストとして開催されているAtcoder Beginner Contest(通称ABC)を解いていくものです。今回はABC167-B「Easy Linear Programming」です。
ポイント
数字が大きいカードから取っていけばよいため,カードの取り方は一意に定まります。問題になるのは,$K$に応じた条件を実装する部分です。結論から言えば,必要となる条件分岐は3回で「$K$が$A$以下のとき(得点は$K$)」「$K-A$が$B$以下のとき(得点は$A$)」「それ以外のとき(得点は$A-(K-A-B)$)」です。ポイントとしては,$K \leq A+B+C$ですので,「それ以外のとき」は「$K-A-B$が$C$以下のとき」になります。
おさえるべき内容
複数条件の場合分け実装
実装
#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
using namespace std;
typedef long long ll;
int A, B, C, K;
int main(){
cin >> A >> B >> C >> K;
if (K <= A) cout << K << endl;
else if (K - A <= B) cout << A << endl;
// K <= A + B + C なので残りのケースではCからK-A-B枚選ぶことになる
else cout << A - (K - A - B) << endl;
}
コメント