B next_permutation
C `A` が一番小さい子には `Y` を `A[i]` 個あげるとしてよい。あとは二分探索形なりなんなりで各子供への渡し方を定められるなら定める。
D むずい、てか解けず。嵐は高々14回しか来ないので、黒の長方形領域が1回の嵐で2つの長方形領域に分かれるのを愚直に求めて、最終的な長方形領域のリストの中で連結判定すれば良さそう。と思ったけど、どうすれば連結判定できるのか。
E Aの値をキーとするセグ木を2つ立てる。1つは個数管理、もう1つは和を管理。
F わからん、なんだこれ
B next_permutation
C `A` が一番小さい子には `Y` を `A[i]` 個あげるとしてよい。あとは二分探索形なりなんなりで各子供への渡し方を定められるなら定める。
D むずい、てか解けず。嵐は高々14回しか来ないので、黒の長方形領域が1回の嵐で2つの長方形領域に分かれるのを愚直に求めて、最終的な長方形領域のリストの中で連結判定すれば良さそう。と思ったけど、どうすれば連結判定できるのか。
E Aの値をキーとするセグ木を2つ立てる。1つは個数管理、もう1つは和を管理。
F わからん、なんだこれ
Lv7 送りにならないことだけ祈っておく
Lv7 送りにならないことだけ祈っておく
マスの4辺に以下のように 0,1,2,3 と番号を割り振って、
```
2
+-+
0| |3
+-+
1
```
その上で↓みたいなコードで移動コスト 0 か 1 かを振り分けた
```
V<ll> cs = {1, 1, 1, 1};
if (g[h][w] == 'A') cs[x^3] = 0;
if (g[h][w] == 'B') cs[(x+2)%4] = 0;
if (g[h][w] == 'C') cs[x^1] = 0;
```
マスの4辺に以下のように 0,1,2,3 と番号を割り振って、
```
2
+-+
0| |3
+-+
1
```
その上で↓みたいなコードで移動コスト 0 か 1 かを振り分けた
```
V<ll> cs = {1, 1, 1, 1};
if (g[h][w] == 'A') cs[x^3] = 0;
if (g[h][w] == 'B') cs[(x+2)%4] = 0;
if (g[h][w] == 'C') cs[x^1] = 0;
```
C Hを降順に調べる。Bはmultisetに突っ込んでおいて、使用できる一番小さいのを貪欲に使う。
D `DP[頭と体の重さの差]`
E むずい。各マスの四辺を頂点とみなして 01BFS
F Aの昇順に挿入。挿入時に条件違反にならなければどこに入れても大丈夫。
C Hを降順に調べる。Bはmultisetに突っ込んでおいて、使用できる一番小さいのを貪欲に使う。
D `DP[頭と体の重さの差]`
E むずい。各マスの四辺を頂点とみなして 01BFS
F Aの昇順に挿入。挿入時に条件違反にならなければどこに入れても大丈夫。