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