上手に場合分けして解いていこう。
問題概要
1 が書かれたカードが 枚、0 が書かれたカードが 枚、 −1 が書かれたカードが 枚ある。
これらのカードから、ちょうど 枚を選んで取るとき、取ったカードに書かれた数の和として、 ありうる値の最大値はいくつか?
考えたこと
できれば 1 が書かれたカードがたくさん欲しいし、できれば -1 が書かれたカードはもらいたくない。
そのような考察に基づいて、次のように整理できる。
- のとき:すべて 1 のカードをとればよい
- スコアは
- のとき:1 のカードを 枚とったうえで、残りはすべて 0 のカードをとればよい
- スコアは
- のとき:1 と 0 のカードをすべてとったうえで、 枚は -1 のカードを取らざるをえない
- スコアは
コード
#include <bits/stdc++.h> using namespace std; int main() { int A, B, C, K; cin >> A >> B >> C >> K; if (K <= A) cout << K << endl; else if (K <= A + B) cout << A << endl; else cout << A - (K - A - B) << endl; }