目次

AtCoder Beginner Contest 198 D,F問題メモ

AtCoder Beginner Contest 198

D - Send More Money

D - Send More Money

問題

解法

いかにもソルバがどっかに転がってそうではあるけど、まぁ総当たりすればよいので自力で書くことにする。

最大 $10! \times 10$ くらいの計算量が必要になるので、直接、文字をreplaceするなど下手な実装するとTLEになり得る。

文字毎に寄与をまとめておくとよい。

   SEND    E: S1の100の位, S2の1の位、S3の10の位に出現
+  MORE       → 100 + 1 - 10 = 91
= MONEY    E にたとえば6を当てはめると、91 x 6 = 546 の寄与

で、全文字の寄与の合計が0になると、その割り当ては覆面算の解ということになる。(先頭文字が0でないチェックも必要)

Python3

F - Cube

F - Cube

問題

解法

$k$ 項間線形漸化式の $S$ 項目は高速に計算する方法があるよ、という問題。

正直、それを自力で導くのは相当骨が折れるので、知識問題感が強い。
(必ずしも使わなくても、パターン分類と行列累乗で解ける。公式解説の解法2。それでも数え上げに上手な発想の転換が必要だが)

以下のあたりが、高速な実装について触れられていて、簡潔と思った。Bostan–Mori のアルゴリズムというらしい。

Python3