■031:C - 積み木
BIT
■032:C - 仕事計画
dp後ろから決めていく
■033:C - データ構造
セグ木の更新とセグ木上の二分探索
■034:C - 約数かつ倍数
A-Bが小さいのでA+1,A+2,,,,,Bそれぞれを素因数分解した結果から
A+1,A+2,,,,,Bをかけ合わせた数の約数の個数を求めればいい
■035:C - アットコーダー王国の交通事情
O(K*N^2)が間に合うならそれで終わり
と思って制約を見ると間に合う設定なためお終い
ワーシャルフロイドで初期状態の最短距離を求めておいて
そこからクエリごとに更新を掛ける
dist[i][j]をdist[i][x]+dist[x][y]+dist[y][j](x,yが逆も同様)で更新できるなら更新
■036:C - 偶然ジェネレータ★★★
よくわかんない
状態数をうまく持つことで計算量を減らしているのはわかるが
減らす方法、減らした後の状態が自分にとって直感的でない。。
■037:C - 億マス計算
二部探索+upper_bound
■038:C - 茶碗と豆★★★
grundy数
nimに苦手意識がある
■039:C - 幼稚園児高橋君★★★
難しい
linked listを自作する?
到達点から上下左右に次の候補点を張り、
次の候補点からの候補点を張り直すイメージ
■040:C - Z塗り
右上を起点に塗っていくイメージ。