AtCoder Grand Contest 026
AtCoder Grand Contest 026 に参加しました!
AtCoder Grand Contest 026 旧版
AtCoder Grand Contest 026 beta版
解けた問題だけ解説をしていきますー
要項
AtCoder Grand Contest 026
rated
7/14(土) 21:00 ~ 23:30 (150分)
200-600-600-1100-1600-2000 (6問)
ペナルティ: 5分
方針
3完できれば恐らくパフォーマンス2400届く、2完なら早解きになるかな?
最低でも2問、幾何や全探索みたいな苦手問題が出なければ3問解きたいね
A - Colorful Slimes 2
スライムの色数なので、色を変える時は未出現の色にすると決めておけば、色を変えたスライムは必ず両隣と色が一致しないことになります。
後は、連続したスライムの数に応じて何体色を変えるか考えてみましょう。
連続したスライムの数をとすると、が偶数の時は半分だけ色を変えれば大丈夫です。
逆にが奇数の時は2番目のスライムから1個飛ばしで色を変えれば大丈夫ですね。
ということは、どちらにしろ体の色を変えていけば大丈夫です。
後は先頭から順に変えていく数を確定させればで求めることができます。
B - rng_10s
まず、制約が大きいのでそのまま愚直にシミュレーションすることはできなさそうです。
そこで、例えば今在庫がとを用いて本ある時、日後には本になることは自明ですよね。
ということで、に関してより大きいならしておきましょう。
注意点として、ならそもそも初日に購入できないのでNoを返す必要があります。
次に、本の在庫を仕入れる時も同様に考えると、に関してもできることが分かります。
更に、の時も売り切れる前に確実に仕入れられるので、でない限りはYesになることが分かります。
また、ならどう考えても在庫は減る一方なのでNoであり、ということは考える必要があるのはのみとなります。
ここまで見ると、全ての変数が以下になりましたね?
ということは、上で全て考えると上手くできるのではないかという推測が立てられます。
さて、この時に実際にどうなるかを実験してみましょう。
9 7 5 9についてmod 7上で考えると、
2本→4本→6本→-1本、これはNoですね。
14 10 8 12について考えると、
6本→0本→2本→4本→6本、以下ループするのでこれはYesです。
さて、このループに関してどうなるか更に検討してみると、次のようなことが分かります。
- 最初の本数をとすると、の本数でループし、その値の中により大きくより小さい値が存在するとNoになる
この時、拡張ユークリッド互除法の考え方を用いると、の全ての値を取ることができると分かります。
後は式を細かく調整すると、ならばYesになることが分かります。
つまり、纏めると以下のようになります。であり、とします。
- ならばNo
- ならばNo
- ならばNo
- それ以外はYes
ユークリッド互除法の計算量はなので、つまり程度で解くことができます。
結果
ooxx-- 2完(800点) 33:25-29:30 / 29:30
337位 パフォーマンス: 1992
レート: 1721→ 1752(+31)
感想
C問題にまさかの全探索が出てきたため、終了が見えたのが残念
制約条件を見た瞬間にbitDPと半分全列挙を疑い、DPが不可と分かった瞬間に半分全列挙は分かった
分かったが……実装できず
やはり全探索の問題は解ける気がしない……