Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

鹿島建設プログラミングコンテスト2020(AtCoder Regular Contest 110)

3完3WA。タイトルながーい。

各問題

A - Redundant Redundancy

2からNまでの総LCMを取ったものに1を足したものが答えです。

総LCM自身は、2からNまでのすべての数の倍数であることは明らかで、それに1を足せばどの数で割ってもあまりが1である数が作れます。

B - Many 110

まずTがSの部分文字列ではないとき、答えは当然0です。(これの実装が一番面倒・・・。)

Tの長さを3で切り上げ除算したものを、1010から引いたものが答え(Sの中にTが存在できるスペースを計算している)ですが、Tが"110"で始まるときは一つ多く置けますから答えを1加算しておきます。

あと、Nが1のときがコーナーケースで、"1"は1010*2存在しますし、"0"はちょうど1010存在します。

切り上げ除算でなく切り捨て除算にしてしまい1WA。もったいないんじゃ・・・。

C - Exoswap

常に大きい数字を右に移動させるとして考えます。ある数字A_iがあるべき位置に移動するとき、その過程でスワップされる数字の列がソートされていればOKで、されていなければNGです。

ソートされていなかった場合どこかでスワップしなければならないのですが、そのためのスワップA_iを移動するためにすでに消費されてしまっているからです。

というわけで、これを大きい数字から順にやっていって移動順を確定させればOKですが、移動回数がN-1に満たなかった場合はNGですし、また、与えられた時点でスワップの必要がない数字が存在した場合もNGです。すべての位置で1回スワップしなければならないのですが、ソート済みの数が最初に存在すると0 or 2回以上のスワップが必要になってしまいます。

どちらにも引っかかって2WA。あと、後者を修正したあと、他になにか抜け漏れがないかと思ってしばらく考えてから提出したのでちょっと損しました。まあそういうパターンでWA連発することのほうが自分は多いので、期待値を考えたら慎重になるべきかなとも思いますが。

D - Binomial Coefficient is Fun

Mが大きいので、なんかスパッと計算する方法があるんだろうなあと頭をひねり続けましたが、残りの一時間椅子を温める結果に・・・。

まとめ

まあ水色中位のパフォが出たので悪くはないかなぁと思います。しかしAtCoderは調子が悪くないのにこどふぉが絶不調なのはなんなんだろう・・・。

f:id:mdstoy:20201205231750p:plain