競技プログラミング用 知識集積所
ABC416A - Vacation Validation
最終更新:
sport_programming
-
view
問題
必要知識
考え方
次に、forループで該当範囲内を前から順にi番目を確認。
このとき、最初から最後まで見るわけではないので、
このとき、最初から最後まで見るわけではないので、
for (int i=l; i<=r; i++) { }
のような形で書く。
ただし、ここで罠が存在する。
問題で指定されたl番目というのは、人間の感覚で、つまり1番目から数えての数値である。
しかし、コンピューターは0番目から数え始めるため、順番が1つずれてしまう。
そこで、あらかじめlとrの値をコンピュータ基準に直してあげて、
問題で指定された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と考える。
あとは、if分岐を使って、xが1つでもあったらNoと考える。
あてはまる部分が1つでもあったらNoという部分は、if分岐の知識を使う。
最初に"Yes"を用意しておき、一度でもあてはまったら"No"にすることでうまく処理できる。
見つけた時点でbreak;して効率を上げてもいいし、間に合うから続きも実行させてもよい。
最初に"Yes"を用意しておき、一度でもあてはまったら"No"にすることでうまく処理できる。
見つけた時点でbreak;して効率を上げてもいいし、間に合うから続きも実行させてもよい。
最後に、忘れずにcoutで出力しておしまい。
解答例
注意点
文字数の数え方に注意
上にも書いたが、人間でいうl番目は、コンピュータにとってはl-1番目。
この補正を忘れた場合にちゃんとWAになってくれる入力例が存在しないので、自力で気を付けるしかない。
この補正を忘れた場合にちゃんとWAになってくれる入力例が存在しないので、自力で気を付けるしかない。