AGC026 B rng_10s
問題概要
はじめジュースの在庫が 本ある。
毎日 本購入され、購入後 本以下になると夜に 本補充する。
永遠にジュースを 本購入され続けるか。
クエリは 個。
制約
解法
まず、 の場合は、初日に 本購入できないので、必ず No になる。
また、そうでなくても、 の場合は、補充数が購入数に追いつかないのでいつか 本購入できなくなるので、 No になる。
逆に、上の2つを満たさない場合で の場合、常に補充が間に合うので永遠に 本購入でき、 Yes となる。
この3つの場合を除くと、残りは かつ かつ の場合である。
このときジュースを 本買えなくなるのは、前日購入後にジュースが 本より多くて補充されずに、かつ当日 本未満だったときのみである。( より補充されていないことがわかる)
つまり、ジュースの残数が 以上 以下になってしまうと No となる。
日後までに 回補充されたときにジュースの残数が 以上 以下になったとすると
が成り立つ。 mod をとると
となる。
式変形すると、 mod において、 が [ , ]の範囲に含まれると No である。
mod において のとる値は gcd(, ) の倍数なので、mod において、gcd(, )が [ , ]の範囲に含まれると No であると言える。
mod において、
とおくと、
のとき、
- を gcd(, ) で割った商と を gcd(, ) で割った商が異なる
- が gcd(, ) で割り切れる
のどちらかを満たす場合のみ、 gcd(, )が [ , ]の範囲に含まれる。
のとき、[ , ]の範囲は [ , ]の区間の集合となっていて、これは を含むので、かならずgcd(, )が [ , ]の範囲に含まれる。
各クエリごとの計算量は なので、全体の計算量は 。
Submission #2864673 - AtCoder Grand Contest 026