競技プログラミング用 知識集積所

ABC416A - Vacation Validation

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識


考え方

まずは入力内容を確認。
入力内容は整数3つと文字列なので、int型変数3つとstring型変数を用意してcinで受け取る。

次に、forループで該当範囲内を前から順にi番目を確認。
このとき、最初から最後まで見るわけではないので、
for (int i=l; i<=r; i++) {

}
のような形で書く。

ただし、ここで罠が存在する。
問題で指定されたl番目というのは、人間の感覚で、つまり1番目から数えての数値である。
しかし、コンピューターは0番目から数え始めるため、順番が1つずれてしまう。
そこで、あらかじめlとrの値をコンピュータ基準に直してあげて、
for (int i=l-1; i<=r-1; i++) {

}
あるいは
l--;
r--;
for (int i=l; i<=r; i++) {

}
としなければならない。
あとは、if分岐を使って、xが1つでもあったらNoと考える。

あてはまる部分が1つでもあったらNoという部分は、if分岐の知識を使う。
最初に"Yes"を用意しておき、一度でもあてはまったら"No"にすることでうまく処理できる。
見つけた時点でbreak;して効率を上げてもいいし、間に合うから続きも実行させてもよい。

最後に、忘れずにcoutで出力しておしまい。

解答例


注意点

文字数の数え方に注意

上にも書いたが、人間でいうl番目は、コンピュータにとってはl-1番目。
この補正を忘れた場合にちゃんとWAになってくれる入力例が存在しないので、自力で気を付けるしかない。

別解

ウィキ募集バナー