Codeforces Round 383
2017-01-12 |
[Competitive programming]
A
全体がサイクルの合併になっていれば OK. (サイクル長が偶数なら 2 で割り,さもなくばサイクル長そのまま) の値をサイクルごとに求め LCM をとる.
B
Union Find をした後にナップサックをする.
C
単純に端から決めるみたいな方針だと難しいが,隣り合っている人同士でペアを作って各ペアの中でも違うものを割り当てる,という条件を課すと簡単に解ける.
D
マージテクをするが,マージ先の相手が存在するかどうかを O(1) で判定する必要がある.
大きい配列にマージ先の情報をすべて持ってしまえばよいが,いちいち全部更新していると計算量が大きいので,できるだけ使いまわす.
E
挿入位置ごとに得られる文字列たち,は suffix array があれば効率よくソートできる.
クエリは平方分割的なことをすれば効率よく処理できるはず.
と思って実装したが間に合わず,終了後送ったものも WA