ABC 341

ABC 341 に参加しました。早解き回にて 6 完青パフォ! 同時期に入水した人たちと同程度のレーティングになりました。嬉ピクミンの宴です。

A - Print 341

1010 .. 1 のような文字列を生成します。 kotatsugame さん情報によると341 = 101010101 (2) のようでした。すご……

-- 上手い方法
take (2 * n + 1) $ cycle "10"

-- 思いつきやすかった方法
init . concat $ replicate (n + 1) "10"

B 問題

畳み込みの問題です。焦って手続き的にやってしまいました。いつものことですが、 gksato さんの提出 が上手かったです。

kotatsugame さん情報によると \(T_i \le S_i\) のため通貨が指数関数的に膨れ上がることはありません。重要な考察ですね (抜けていました) 。

C 問題

全探索の問題です。すべてのセルを起点にシミュレーションすれば解けます。

制限時間がシビアなため、 Haskell ではサンクを溜めると TLE になるようです。僕は即 break できるように再帰関数を使っていました。

let solve (!y, !x) !bs = case BS.uncons bs of
      Nothing -> True
      Just (!dir, !bs') ->
        if not (inRange (boundsIV gr) yx') || gr @! yx'
          then False
          else solve yx' bs'
        where
          !yx' = add2 (y, x) (toD dir)
U.generate (h * w) (`divMod` w)

kotatsugame さん情報によると、終点の位置を数える問題だったようです。僕は始点の位置を数えてしまいました。単射で助かりました。

D 問題

算数を考えていましたがサンプル 3 で TLE. 2 分法で効率化できました。なるほど……!

めぐる式 2 分探索は フォルシアの記事 の図解が一番分かりやすかったです。

E 問題

前回の E 問題で遅延セグメント木が出題されたこともあり、躊躇なく使用しました。が、勇み足だったようです。セグメント木 1 本で通ります。

前回の E は緑 diff で、今回の E は水 diff でした。教えはどうなってんだ教えは!

F 問題

高い所から低い所まで水が降りていくような問題でした。低いところから順番に解を求めます。部分問題はナップサック問題です。

青 diff にしては実装が軽かったですが、 F - Robot Rotation などは青 diff 中盤だったので、その辺りに壁があるようです。

競技プログラミング

動的計画法

EDPC の D - Knapsack 1Max モノイドで解いてみました 。半環の気持ちで NumMonoid を使うのは手に馴染みます。

型クラス Semiring を作るのはやり過ぎかも……?

ライブラリ

KnownNat

型レベルリテラル?を GHC の KnownNat に移行しました。 Integer を返すため、若干遅くなった気もしますが、 type として定数を書けるのが格好良くて気に入っています。

{-# LANGUAGE DataKinds #-}
import Data.Proxy
import GHC.TypeLits

type MyModulo = (998244353 :: Nat)

-- | 998244353 :: Integer
example :: Integer
example = natVal (Proxy @MyModulo)

AtCoder Library Practice Contest

この常設コン をやっていました。 PAST と範囲が被ります。やはり PAST でも ac-library で解ける問題が出されるわけで、難問の準備に良さそうでした。

Library Checker

Library Checker も難問揃いで憧れます。

library-checker-problems にてテストケースを生成できる他、 verification-helperoj-verify run にてテストケースのダウンロードと実行を自動化できるようです。便利!

NixOS だと sandbox からの脱獄に失敗しました。便利じゃない!

Misc

朝起きれない時は、俺自身がソラールとなることだ。

キーボード

MiniAxe の在庫補充があり、即注文しました。楽しみです。

Cyberpunk 2077

ファン作品が面白かったので買いました。他のことが気になって中々プレイできませんが、初めて GPU (RTX 3070) を活用している気がします。

Web 開発

Emmet 道場と AtCoder diff が欲しいです。

進捗は無ですが、やります! 本当なんです!!