バイトの競プロメモ

主に競技プログラミング

AtCoder Regular Contest 152 D - Halftree

D - Halftree

メモ

木を生成できるような操作列を求めろ。

ここで操作とはu-vに辺を貼ったときに(u+K)%N, (v+K)%Nに辺が貼られるようなものである

 

Nが奇数の時だけ考える

k==1の時にパスを作りたくなる

また、g=gcd(N, K)でg==1なら、0-KとKずつ増やすことで同様にパスが作れる

g!=1の場合、0,1,...g-1からスタートしてKずつ増やした時に互いに独立する

 

そこでそれぞれの列について長方形のように並べたくなる

以下のように、スタートした値ごとに、Kずつ足して得られる順番に縦に並べる。

N==奇数であるため 奇数*奇数の長方形ができる

以下のように結ぶと木が得られる