はまやんはまやんはまやん

hamayanhamayan's blog

競技プログラミングにおける分割統治法問題まとめ

分割統治法

  • 「列の分割統治法」、「木の分割統治法」、「平面の分割統治法」
  • 色んな分割統治法があるが、大体空間サイズが半分になってlogNくらいで解けるようになる
  • 再帰的な定義がなされているやつを再帰的に処理して解決する問題もある
  • 列の分割統治法はセグメントツリーでの別解がよくある印象
  • 木の分割統治法では「重心分解」が有名

FourLamps [TopCoderOpen 2017 Round2A Div1 Hard]

https://community.topcoder.com/stat?c=problem_statement&pm=14597&rd=16929

問題概要

N個のランプがあり、on/offのどちらかの状態をとる。
最初はinitの状態になっている。
ここから、K回以下の操作を繰り返す時に最終的にランプが取りうる状態数は何通りか。

1. 連続する4つのランプを選ぶが、少なくとも1つがonか少なくとも1つがoffで無ければならない
2. この4つのランプの中心を分割点として、N個のランプ全体を前半・後半の2つに分ける
3. 前半・後半のどちらかを選ぶ
4. 選んだ方を反転させる

続きを読む

DistanceZeroAndOne [TopCoderOpen 2017 Round2A Div1 Med]

https://community.topcoder.com/stat?c=problem_statement&pm=14596

問題概要

N頂点の連結な無向グラフがある。
これについて、頂点0から各頂点への距離dist0と頂点1から各頂点への距離dist1が分かっている。
2つの距離が満たされる無向グラフがあれば復元せよ。

続きを読む

FoxAndCake2 [TopCoderOpen 2017 Round2A Div1 Easy]

https://community.topcoder.com/stat?c=problem_statement&pm=14609&rd=16929

問題概要

チェリーがC個、いちごがS個ある。
これを以下のルールでグルーピングする。

  • 全てのチェリーといちごが何処かのグループに入る
  • 何グループに分けてもいい
  • 各グループ1つはチェリーといちごがそれぞれある
  • 各グループのチェリーといちごの数は互いに素になってはいけない

全て満たすように分割可能か

続きを読む

競技プログラミングにおける中国剰余定理問題まとめ

中国剰余定理

  • 中国風剰余問題、中国人剰余問題、CRT : Chinese Remainder Theorem
  • 表記ゆらぎがむっちゃあるのでCRTで統一した方がいいんじゃないかと思ってる
  • 解説
  • 解ける問題
ある数m1,m2,...,mnとある数a1,a2,...,anがあり、
x ≡ a1 (mod m1)
x ≡ a2 (mod m2)
…
x ≡ an (mod mn)
であることが分かっている時、これを満たすx(mod m1*m2*...*mn)を導出する

競技プログラミングにおける永続データ構造問題まとめ

永続データ構造

  • persistent data structures
  • 解説
  • 色々ある「永続配列」「永続セグメントツリー」「永続Union-Find」「永続木」「永続平衡二分木」「永続WaveletMatrix」参考
  • 部分永続。最新版のみ変更可能、Undoができる機構がある。履歴は一直線。
  • 完全永続。昔のどのバージョンからでも変更でき、履歴が全て残っている。履歴は木。
  • 永続配列があれば永続Union-Findが作れるらしい
  • 永続配列は永続木があれば作れるらしい
  • 部分永続Union-Findの資料
  • 部分永続はスタックで履歴を残しておいて逆操作をしていって戻すやり方がある(要出典)多分そのやり方でやってる
  • 平衡二分木を永続化するときは赤黒木が最良らしい

問題

AtCoder Beginner Contest 062 / AtCoder Regular Contest 074 解説

ABC062 http://abc062.contest.atcoder.jp
ARC074 http://arc074.contest.atcoder.jp

以下、解説

続きを読む