ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

AGC051 B - Bowling

問題
提出コード

解法

まず、(0,0), (1,1), \ldots (9,9)という置き方を考えます。すると、下の図のように、対角線上に点が10個並びます。この時、A, C, Dは同じ個数だけ見えて、Bだけ1個しか見えません。よって、この置き方を1つのブロックとして大きな1個の点とみなすと、このブロックを用いて、A, CがDの1/10以下になるような配置を考えればよいことになります。
なので、これ以降Bのことを気にする必要が(ほぼ)なくなります。
f:id:emtubasa:20201228121550p:plain


上記のブロックをたくさん置いたときに、Dから見える個数がAとBの10倍になるようにしたいです。
一番簡単そうなのは、x座標とy座標を10個ずつ決め打ち、100個の点をプロットしたとき、 x + yが全て異なるようにする、というものです。
これは、xが1の位、yが10の位、となるようにしてxは0,1,\ldots 9、yは0, 10, \ldots 100を選べばよいです。
あとは、先ほどのブロックの大きさが10 \times 10なので、和が重複しないように選ぶx座標とy座標の微調整を行えば、1000個の点をプロットしたときにA~Cが100、Dのみ1000、という状態を作ることができます。
具体的には、xは0,20,40, \ldots、yは0,200,400, \ldotsとすれば問題ありません。

感想

難しかったです…でも解けた時はなるほど、となりました。面白かったです。
斜めにできるだけ置かないとBがかなり強かったのですが、そうするとACが半分にしかならない、という状態が多発していました。今回のコンテストはかなり冷静でいられたと思ったのですが、それでも時間がかかっているので悔しいです。