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

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

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

やったの昨日なんだけども。 参加できてないABCを片っ端からバチャってこうというやつです。出来ればupsolveなどで補完しつつ緑までは埋めたい。

  • やった回: ABC314
  • 成績: ABCD4完 / 0ペナ/ 44:31(ペナ込み)
  • 推定パフォーマンス: 1159

E問題を考える時間が1時間弱くらい作れたんだけど全然分からず。解説読んでもいまいちピンとこないので(DじゃなくてE問題だし)とりあえず後回し… なんだかハッシュと文字列操作祭りだった。

A問題: ABC314-A 3.14

atcoder.jp

先頭から指定された範囲を指定して出力する。2桁のオフセットがあるので n - 1 + 2n + 1 文字目が小数第n位になる。 ところでこれ円周率の文字列をcharsで分解しているけど必要なかったな…?

B問題: ABC314-B Roulette

atcoder.jp

入力を受け取るタイミングで「誰がいくつ賭けたか」「この目に賭けたのは誰か」をそれぞれ個別に管理しておいて、当たり目を賭けた人のリストを取って、また賭けた数ごとのハッシュを作って、一番少ない数のグループのリストを出す。 それぞれ一発で引きたいのでハッシュで管理。

Hashのデフォルト値を空の配列にする方法が分かってなくてなんか自己代入演算子で愚直にやってるんだけど、この記事を書く段になって確認したらArrayと同じ感じで Hash.new {|hash, key| hash[key] = []} で行けるらしい。スニペットにメモっとくか…

C問題: ABC314-C Rotate Colored Subsequence

atcoder.jp

題意を理解するのにちょっとややこしさを感じたものの、提出してみたら割とするっと通った。(実際B問題が一番時間がかかっている) 制約的にN2の二重ループは出来ないもののNのループを定数回回すことは出来るので、「sを先頭から走査して色ごとに文字を仕分ける」「色の塗り分け指定を先頭から走査して、色ごとに問題指定の順番で出力していく」という処理で無事にAC。

D問題: ABC314-D LOWER

atcoder.jp

upperだろうがlowerだろうが、一度でもどっちかに指定されたら全部同じ文字に揃うので、最後に指定されたのがどっちか(もしくは指定されなかったか)・最後にupper/lowerが指定されて以降に置き換えられた文字がどれかを管理して、クエリが全部終わったらその内容に従って先頭から配置しておけばよい。