abc023_d
結構悩んで解いた問題。
解説を読んでも
の部分がずっとハテナだったけどt[i]はデッドラインだからデッドラインが今割るべき時間iより小さかったらNG
*1:mid-h[i])/s[i]);
arc084_a
少し紙に書いて考えたら、なるほどーって閃いた問題
中部を基準として決め打ちすると
・基準より小さいものを上部から選ぶ
・基準より大きいものを下部から選ぶ
というそれぞれの二分探索を行えば作れる祭壇のパターン数が分かる
あとは全中段のパターン数を足せばOK
joi2009ho_b
宅配先に近い店舗を二分探索で見つける。
今回は探したいものが環状線になっているのでd-1と0をまたぐ必要がある
→番兵としてdの箇所にも店舗を置いておく(本店の座標は0=d)
あとはd[i] < kを満たすような最大のd[i]を見つけて、kを跨いだ隣の店舗d[i+1]との差分の小さい方が一番近い店舗となる。
ALDS1_4_B
T[i]がSの中に含まれているかを二分探索する。
二分探索は関数化すると実装しやすい。
問題とは関係ないけど、macを購入してから初めてのAC
自分の持ってるwindows機より軽くて持ち運びやすいmacbook airで競プロできるのは勉強時間増えるのでGOOD
ALDS1_13_A
有名な8クイーン問題
・同じ行、同じ列にクイーンを置かないこと
・左斜め上、左斜め下、右斜め上、右斜め下にクイーンを置かないこと
上記2点を満たせばよい。
・同じ行、同じ列にクイーンを置かないこと
⇒順列そのままで全列挙可能なので判定は不要
・左斜め上、左斜め下、右斜め上、右斜め下にクイーンを置かないこと
⇒4ベクトル方向に探索
条件1は順列のみで実現出来るのであとは8個のクイーンが全て条件2を満たせばOK
abc150_c
問題文通り
vector <int> v;
for(int i=0;i<n;i++) v.push_back(i+1);
do{
}while(next_mermutation(begin(v), end(v)));
上記テンプレを覚えればとりあえずOK
abc145_c
問題文通りに実装するだけ
こういう系って再帰で実装できなかったかなぁー?とこねくり回したけどうまく書けず
ググったら便利な関数出てきてほぼ写経