A. Save Energy!
全部で $2t$ とる必要があって,$1$ 分あたり $1$ または $2$ とれるということです.$k$ 以上の最小の $d$ の倍数の時刻が 1 周期になります.
B. Sleepy Game
$1$ 人ゲームで,結局のところ極大な walk の長さの parity について問われています.頂点と parity の組の $2N$ 頂点のグラフで scc します.勝てるのはある parity の終点に行けるかどうか,引き分けられるのは頂点数 $2$ 以上の強連結成分内の点に到達できるかです.
C. Lock Puzzle
multiset としての一致が必要.必要条件のもと実際に作ることができます.
「$S$ の末尾 $n$ 文字が $T$ の先頭 $n$ 文字と一致している」という $n$ を増やしていきます.
$XaY \to \mathrm{rev}(Y)Xa \to a\mathrm{rev}(Y)X \to \mathrm{rev}(X)Ya$ という要領で末尾の後ろに目的の文字を足すことを繰り返します.
D. World of Tank
攻撃したオブジェクトの位置は必ず通るとしてよく,すると現在地より前を $2$ レーンとも攻撃しているということはありません.
あるマスに到達したとき,自身の目の前に最大何回攻撃を打ち込めているのかという値を dp で求めます.復元が面倒.
E. Iqea
全然思いつかなかったのは反省….綺麗だし言われれば割と自然だとは思います.
横に隣接するマスをまとめてひとつの区間にします.区間同士が上下に隣接するときに辺を張ります.
すると,区間からなる木ができます.外部領域がひとつながりだという条件からサイクルができないです.
あとはこの木を重心分解すればよいです.各マスについて,根となる区間まで貪欲に向かったときの行き先とコストを前計算しておけば,更新・求値のクエリはセグメント木の簡単な操作になります.