ABC 369
ABC 369 に参加しました。
問題 | A 問題 | B 問題 | C 問題 | D 問題 | E 問題 | F 問題 |
---|---|---|---|---|---|---|
提出 | AC | AC | AC | AC | AC | - |
予想 | 50 | 400 | 500 | 500 | 1,500 | 1,200 |
実際 | 28 | 62 | 323 | 621 | 1,301 | 1,618 |
A 問題
思い切って全探索する問題だと思いました。
import Data.List;main=interact$f.map read.words;f[a,b]=show$sum[1|x<-[-300..300],(==1).length.nub.(zipWith(-)<*>tail)$sort[a,b,x]]
B 問題
入力で 1 行内に整数と文字が混じっているのが厄介です。
words <$> getLine
または、 StateT
ベースのパーサがあれば合成
(?) できます:
!ass <- U.replicateM n $ (,) <$> int' <*> char'
(左手の位置, 右手の位置)
を持って畳み込みで解けました。
let !res = U.foldl' step s0 as
where
s0 = (-1 :: Int, -1 :: Int, 0 :: Int)
step (!l, !r, !acc) (!i, 'L')
| l == -1 = (i, r, acc)
| otherwise = (i, r, acc + abs (i - l))
step (!l, !r, !acc) (!i, 'R')
| r == -1 = (l, i, acc)
| otherwise = (l, i, acc + abs (i - r))
左手と右手は独立した問題なので、実装の共通化もできるようです。
C 問題
苦戦しました。差を取れば素直に RLE (run-length encoding) にできたようです。
Union-Find でも同じようなことができます。なるほど:
C みたいな問題はこんな感じに UF で繋ぐとクソ楽にできる pic.twitter.com/xmcUTBkSCH
— あちゃぴ🍋 (@achapi_kyopuro) August 31, 2024
D 問題
素直な DP です。畳み込みで解けます。
let (!r1, !r2) = U.foldl' step s0 xs
where
s0 = ((-1) :: Int, 0 :: Int)
step (!accOdd, !accEven) x = dbgId (accOdd', accEven')
where
accOdd' = max accOdd (accEven + x)
accEven'
| accOdd == -1 = 0
| otherwise = max accEven (accOdd + 2 * x)
printBSB $ max r1 r2
E 問題
整理すると
短いコードになりました
。
学びの多い問題でした。
Floyd–Warshall vs 全頂点 Dijkstra
計算量は \(O(V^3)\) vs \(O(V(E+V)\log V)\) で Dijkstra の方が小さい
はず です。実際は、同程度の速さになりました。案外
Floyd–Warshall の方が無難で良さそう です。
盆栽要素
ライブラリを整理しました。
vertor
版 permutations (のバグ修正)-
Floyd–Warshall
-
自分自身への遷移 (
v -> v
) をコスト0
で初期化する
-
多重辺を正しく処理する
初期化で初回遷移を書き込む際に、単純な上書きではなくmin
で緩和する
-
自分自身への遷移 (
F 問題
LIS +
経路復元の問題でした。最大値と共に親頂点の位置を記録します。最大値が更新される度に、経路復元用
Map
が持つ親の位置を更新します。
出力は Bulider
を使うのが計算量の観点で無難です。
Misc
-
Alpaca Hack Round 2 (Web)
ちょっとだけやってみます。
-
The Master Forge
CharaChorder の新作キーボードの Kickstarter が出ました。すべてのキーがフリック入力で、 chording (ステノタイプみたいな機能) が搭載されています。欲しいけれども、結局 Keyball に戻ってくるのも目に見えていて……?
-
haskell-names
これで名前解決する bundler が作れそうですが、乗り気ではありません。
-
haskell-src-exts
べースです
最新の構文には対応できません。
-
Environment
(名前空間の情報) を作る必要があります
AtCoder 環境のパッケージが export するシンボルをすべてEnvironment
に載せる必要があり、自動化の検討が必要です。
-