Xmas Contest 2018
Updated:
Source codes
Solutions
A - Art Time
iPad Pro + Apple Pencil + Procreate でとにかく頑張って塗った。
ポイント
何もない。今年のパズル枠。
B - Bit Smaller
考えたけどよくわからなかった。
ポイント
C - CombinatioN
1-緩和問題にみえたけどやめておいた。
ポイント
D - Devilish Dice
ポイント
E - Exclusive☆OR
ポイント
F - Fluffy Fox
全部交差させる。とりあえず $y$ 座標を $10^9$ と $-10^9$ で $x$ を左右に散らしていたんだけど、それだけだと交点が重なるので WA した。しかし $\lvert y \rvert$ を少しずつ減らせば AC した。
つまり、以下のようにする。
for (auto i = 0; i < N; i++)
{
vector<P> v;
lb -= 20;
v.push_back(P(lb, -1000000000 + i));
lb += 2;
v.push_back(P(ub, 1000000000 - i));
ub += 2;
v.push_back(P(lb, -1000000000 + i));
lb += 2;
v.push_back(P(ub, 1000000000 - i));
ub += 2;
v.push_back(P(lb, -1000000000 + i));
lb += 2;
V.push_back(v);
}
ポイント
早い段階で AC が出ていたので、全部交差するんだろうなと思っていたらやっぱりそうだった。 $3$ つの線分を同一の点で交差させないことが重要だと思っていたが、特に苦もなくクリアできた。
G - Good Game
部分点解法
後手を選んで $(r, c)$ を取られたら $(H - r - 1, W - c - 1)$ を取ればよろしい。こうすると、仮に後手に $2 \times 2$ ブロックができたとすると、その $1$ 手前に先手に $2 \times 2$ ブロックができているはずで矛盾する。つまりこのゲームは、先手が最善を尽くしたとしても全てのマスが埋まるので、先手が負ける。
満点解法
すぬけさんの記事を見れば一発でわかる。
実装においては、例えば typedef tuple<int, int> P;
とし、 map<P, P> M;
にペアリングを入れておき、 set<P> S;
に残りのマスを入れておく。相手からきたマスを M
に問い合わせて、なければ S
から削除して、 S
から $1$ 個出す。あれば M[p]
を取り出す。
ポイント
H - Hello, Xmas Contest 2018
ポイント
I - Interesting Equation
$3$ 次方程式の解の公式($x = \alpha - y - z$ とするやつ)を考えながらやったが全然わからず。すごい難問のように思ったけど解きたかった。