イノたまごラボ・あのぶる の「こんなの作ったよ!」

「イノたまごラボ」はひとり同人サークルのようなものです。今のところ同人誌は作っていませんが、ソフトウェアからイベントまで、心惹かれたものを細々と。

ABC全部やるチャレンジ・ABC324

全体の進捗

  • やった回: ABC324
  • 成績: ABC3完 / 4ペナ(+未AC3ペナ)/ 70:34(ペナ込み)
  • 推定パフォーマンス: 728

B問題に異様に苦戦してしまい結構悔しいやつ。4ペナ中3ペナは完全に余計なので防ぎたかった。

先週に続きRails Girls競プロ同好会の活動で実況しながらやりました。

A問題: ABC324-A Same

atcoder.jp

受け取った配列の値をuniqして1個だけだったらYesを出力する。

B問題: ABC324-B 3-smooth Numbers

atcoder.jp

最初安易に素因数分解をしてしまいTLE。これは仕方ないとして、Nの上限を何故か1012と勘違いしてWAを3個積んだのは完全にアウト。

方針としては制約の範囲に収まる2のべき乗と3のべき乗の上限っぽい値を調べて(3のべき乗は調べきれなかったので適当な値)全探索しました。

C問題: ABC324-C Error Correction

atcoder.jp

場合分けして地道に検証。

S_iとT'の文字数が一致しているときは良いとして、問題は文字数が1文字違いの2ケース。「長い文字列と短い文字列の比較」と若干の抽象化が出来るのでちょっと助かった。 頭から1文字ずつ比較していくんだけどサンプルが親切で最初の実装ではダメなことが分かり、素直に対処していったらまぁまぁ真っ当なタイムで通せたのでよかったです。多分解説で言う別解に近い解き方だと思う。

D問題: ABC324-D Square Permutation

(upsolveコード) atcoder.jp

はじめ素朴にpermutationして通らないですよねーという謎の確認をした後、ありうる範囲の平方数を全部検証していく方が早いのでは、というところまでは素直にたどり着く。 この後の実装がかなり苦しく、ついでにコーナーケースのWAが取れないまま時間切れ。 一番可読性が良かったので出来れば公式解説みたいに数字をソートして比較したかったんだけど、(num**2).digits.sort.to_s.rjust(n, '0')ってやろうとするとだいぶ処理が重たいらしく(いやまぁ実際やりたいことに対して回りくどいとは感じる)、大量のTLEを眺めた後にRubyのACコードを参考にさせてもらってようやくAC。

これ、類題出たときに解法自体はサラッと出るだろうけどTLE起こさずに解ける自信がない。どうしよう。