AtCoder ABC324 振り返り

多分需要は全くないと思うのですが、自分のために書き残します。

結果

今回はやっとC問題も解くことができ、3完できました!!

得点状況
レーティング

各問題の振り返り

A - Same

リストの全ての値が同じかどうかを問う問題です。リストの重複した要素を全て除外した時に、リストの大きさが1になることを確認すれば解けます。(Haskellだとnubでできます。)特に難しいところは無かったです。

B - 3-smooth Numbers

ある整数Nに対して、2^x*3^yを満たすx, yが存在するかを問う問題です。①Nが2の倍数もしくは3の倍数であること、②Nが1であること(x=0 かつ y=0)であることのいずれかを満たせば条件を満たすことになるので、これを判定する処理を書けば良いです。 特に難しくはないのですが、制約で1≤N≤10^18となっていることから、Intだと32ビット整数でエラーになる可能性があります。(32ビット整数の最大値は 2^32 - 1 = 4,294,967,295 なので収まらない場合がある。) このような時はIntegerで多倍長整数型を使うと回避することができます。 (参考: http://walk.northcol.org/haskell/basic-data-types/)

C - Error Correction

ある条件で変更されているかどうかを確認する問題です。
文字列の長さが5×10^5とそこまで長そうではない(?)こと、再帰で愚直に二つの文字列を比較してもO(N)で解けそうだったので、愚直に解く判断をしました。
この問題も特に難しくは無かった印象ですが、『一文字だけ書き換えられていること』の判定処理で文字列の長さを比較するのを忘れてしまい、デバッグに手間取ってしまいました。

全体の感想

今回は珍しくC問題が解けたのですが、たまたまかな…という印象でした。もっと安定して解けるようになりたい。
ただ、WAになった時に入力の制約を見て原因を考えたり、自分で怪しい入力を考えてテストしたりしてみたのはよかったかなと思っています。
次はもっと速く安定してCまで解くのと、D問題も解くことが目標です!

この記事が気に入ったらサポートをしてみませんか?