きろく

特筆すべき記録のまとめ

いろはちゃんコンテスト Day1:F - Head of The Dragon

問題

atcoder.jp

解法

N を素因数分解したときの項数よりも K が大きいとき,条件を満たす解はない.

そうでないとき,答えの 1 ~ K - 1 項まで順番に N の素因数を小さい順に当てはめていけばよい.最後に残った素因数を全て掛け合わせたものを答えの K 項とすればよい.O(√N + K) となるが,N の素因数の個数は最大でも 30 個程度に抑えられるので K は実質 K <= 30 ぐらいになる.

解答

atcoder.jp

f:id:babcs2035:20190430155821p:plain

 

いろはちゃんコンテスト Day1:E - 放課後

問題

atcoder.jp

解法

デートする日を最小化することを考える.以下,最小のデート回数を考える.

B = 0,すなわち,記念日が無いとき,最小のデート回数は N / A.

そうでないとき,0 日目と最初の記念日の間,B - 1 箇所ある隣り合う記念日同士の間,最後の記念日と N 日目の間の3つに分けて考える.まず,0 日目と最初の記念日の間には空白が D[0] - 1 日ある.よって,最小のデート回数は (D[0] - 1) / A となる.次に,隣り合う記念日同士の間には空白が D[i + 1] - D[i] - 1 日ある.よって,最小のデート回数は (D[i + 1] - D[i] - 1) / A となる.最後に,最後の記念日と N 日目の間には空白が N - D[B - 1] 日ある.よって,最小のデート回数は (N - D[B - 1]) / A となる.この 3 つを足し合わせたものが全体の最小のデート回数となる.

最終的な答えは N から最小のデート回数を引いたものになる.O(B).

解答

atcoder.jp

f:id:babcs2035:20190430155325p:plain

 

いろはちゃんコンテスト Day1:I - リスのお仕事

問題

atcoder.jp

解法

木を頂点,枝を辺として無向グラフを考える.このとき,前に移動した枝の隙間の大きさを状態として加えたダイクストラ法を用いて,頂点 1 から各頂点まで休まなければいけない最小の回数が求まる.よって,答えは (dist[N] + 1) * K となる.

解答

atcoder.jp

f:id:babcs2035:20190430161637p:plain