Codeforces #629 (Div.3) 感想等
Codeforces #629 (Div.3)が昨日23:35から行われました。
当記事では、当該コンテストの問題についての解説を行います。
が、その前に
Codeforce重かったですよね....今回、20000人以上の参加になったみたいなので、ジャッジなども重くなったみたいです。(問題文が見れなくなることもありました)
A問題
個のテストケースが与えられて、それぞれに対して以下の問題を解きます:
2つの整数が与えられます。
をに任意回変更することが出来ます。(つまり、に何度も1を足すことが出来ます)
この時、をで割り切れるようにするには、を何回変更する必要があるか求めなさい。
制約:
解法
まず、がで割れるかどうかで条件分岐を行います。
(ここで、をで割ったあまりをとします。)
なら、何も操作する必要がありませんから、0を出力します。
なら、bに対して回の操作が必要ですから、
の値を出力します。
これでこの問題を解くことが出来ました。
B問題
個のテストケースが与えられて、それぞれに対して以下の問題を解きます:
2つの整数、が与えられます
文字が"a"で、それ以外の文字が"b"である文字列を考えます。このとき、
桁でこれを満たす文字列の内辞書順で番目の文字列を出力して下さい。
制約:
考察(Ruteは解けませんでした)
問題文を読むと、
"2桁が"b"で、残りの桁が"a"である文字列のうち番目の文字列を出力しなさい。"と言い換えることが出来ます。
ここで考えたのは、「異なる2つの2のべき乗で表される数字」というものです。
例えば、、、
のように、で表される数が数列になっています。
これを利用すれば、条件を満たす2進数を列挙することが可能になります。
追記13:45)例えば、のとき、数列の1項目であるを考える2進数としましょう。
の2進数表現は"11"なので、5桁にゼロ埋めし、その後に"1"の部分を"b","0"の部分を"a"としました。すると、"aaabb"が出力されます。
これを他のでも同様にすれば良いです。
ただ、一般項などが分からなかったために、作成したリストを提出しようとしましたが
65536文字以上のコードなので提出できません。
orz。まぁ対策はされていたということを初めて知ったので良い経験になりました。
A問題の1完です。koboshiさんの記事を読んでまた勉強したいと思います。
解説は以上です。コードなどの提示を求められましたら随時このブログに掲載します。