強くなりたい

毎日無意識に生きてて良くない

典型90問 まとめ 021~030

022 - Cubic Cake(★2)

できる立方体のうち最も大きいモノを考えるとその一辺は  g = \gcd (a,b,c) である。

実際そうなるように分割したときの操作の回数が今回求めたい最小回数である。

各面に対して何回操作を行うかと考えることでその回数は

 \displaystyle
\left(\frac{a}{g} -1\right)+\left(\frac{b}{g} -1 \right)+\left(\frac{c}{g} -1\right)

と求まる。

AC

024 - Select +/- One(★2)

ABに合わせるのに必要な操作の最小回数はS = \sum_{i=1}^n |A_i-B_i|である。

このSS \leq Kを満たしかつ(S-K)\% 2 = 0であることがちょうど K回でABに合わせられるための必要十分条件

AC

026 - Independent Set on a Tree(★4)

木は二部グラフである!!!!

私はこれが思いつかなくて結局解説を見た。

隣り合う木に順に黒と白の色を塗っていってグループ分けする。すると同じ色に属する木は隣り合わないので黒と白のグループのうち大きい方を出力すれば良い。

AC

027 - Sign Up Requests (★2)

set型を使うとin演算子が高速で動作する。これを使うと簡単。 AC

参考↓ Pythonで"in list"から"in set"に変えただけで爆速になった件とその理由 - Qiita

028 - Cluttered Paper(★4)

いもす法を使う。私はいもす法をあんまり使ったことがなかったのでちょっと実装に手間取った。

AC

参考↓

いもす法 - いもす研 (imos laboratory)

解説を読んでもよく分からなかった人のための「いもす法」の解説|きりみんちゃんノート|note

競プロの基本事項確認~累積和といもす法~ - Qiita