AtCoder Beginner Contest207に参加しました。
結果
A,B,C問題の3問正解でパフォーマンスが1145でした。
前回同様D問題が解けそうで解けず、E問題がもうすこし頑張れば解けそうな気がした。解説読むとE問題は方針自体は間違ってなかったから、もう少し考察がちゃんとできてれば正解できてたのかなあ。
あと、今回は普段よりも頭の回転が鈍ってた気がする。B,C問題が問題文読んでもすぐにはよく理解できなかった…
A - Repression
3通りある解候補(A+B,A+C,B+C)を計算して最大のものを出力すれば良い。
他には、3つを配列に入れてソートして上位2つを足したものを出力しても良い。
B - Hydrate
初期状態が水色A個、赤色0個に対して水色Bx個、赤色Cx個ずつ足していって
A+BxがCDx以下になる最小のxを求める問題。
x自体は何回足したか数えながらループで処理すれば求められる。問題は何回足してもA+Bx>CDxにしかならない場合の判断方法。
結局の時は条件を満たせないのでループ前に確認して対応する。
C - Many Segments
制約を見るとだから二重ループくらいまでなら間に合いそう。なのでi,jの組合せは全通り探索できそう。
あとは手短に区間iと区間jに重なっている部分があるかどうかを判断できれば正解できそう。
注目している区間が閉区間の場合は問題ないけど半開区間、開区間がある場合は判断がやりづらい。端点を含まない場合の表現方法を知らなかったので、とりあえず今回は0.1だけずらして対応してみた。
区間が被っているかどうかは開区間の処理後に2つの区間の両端の大小関係をもとに判断した。
D - Congruence Points
回転して平行移動すると一致させられるかどうかを答える問題。
点の回転なので回転行列と掛ければ良さそう。でも結局解けなかった。
制約を見るとNは小さいし角度も360度程度しかないので、Sのある点を回転させて平行移動するとTのある点に一致させられるかどうか、一致する時は全部の点を同様に回転・平行移動させて全部一致させられるかどうかを360度全部確認はできそう。実際は小数点以下で誤差があるのかうまく行かなかった…
E - Mod i
問題文を読んでDPで解けそうだと思ったから DP[i][k][x]=までの部分数列をk個に分割する(k個目の部分数列はから始まる)時の何通りあるかで解こうとしたけどなので案の定TLEした。解説を読むとバッチリこの方法だとTLEするって書かれてた…