ABC466 A - Compromise
妥協
考え方
入力は整数と数列が $1$ つずつ。
int 型の変数と vector を $1$ つずつ用意し、cin で入力を受け取る。
さて、問題の意味がパッと読むだけだと分かりづらいが、タイトルから考えると少し理解できる。
「どんな選択でも損するけど仕方がないな」と妥協しなければいけない状況か、という意図らしい。
これは、選択肢を $1$ つずつ見て、「これは損しますか?」と確認をしていくとよい。
全てが「損します」なら、答えは "Yes"。
$1$ つでも「損しません」があれば、答えは "No"。
すべての選択肢がある条件を満たすかどうかの判定は、以下の手順で行う。
- まず、
bool型の変数を用意し、trueで初期化する- 本問では、代わりに
stringを用意して"Yes"で初期化する方がわかりやすい
- 本問では、代わりに
- for ループで、ありえる可能性すべてを見るループを書く
- その中で、条件に反しているかどうかの if 文を書く
- 本問では、$-1$ 以下という条件に反しているか、つまり $0$ 以上かどうかを括弧内に書く
- 条件に反していたら、用意した
bool型の変数をfalseに書き換えるstring型を使った場合は"No"に書き換える- 条件に反していなかった場合は何もしない
全部見終わった後で、bool 型変数の中身が true だったら "Yes"、そうでなければ "No" を出力。
最初から string 型変数を使った場合にはそのまま出力すればよい。
入力例1での動作
入力を受け取る。
n: 4
x: {2, 0, -1, 2}
各選択肢について、値が $-1$ 以下かを確認する。
| 選択肢 | 値 | $-1$ 以下か |
|---|---|---|
| $1$ | $2$ | × |
| $2$ | $0$ | × |
| $3$ | $-1$ | ○ |
| $4$ | $2$ | × |
$0$ 以上の値が存在するため、全ての選択肢で損するわけではない。
したがって、答えは No となる。
注意点
特になし。
別解
ループ内で「今何番目であるか」を使わないので、範囲for文を使ってもよい。
いちいち .at(i) を書く手間が省けるし、for ループを何回回すべきか考える必要もなくなる。