問題
提出コード
数ヶ月放置してから考察しなおしたらすんなりいきました。
解説がなくてわからない問題は寝かせるのも大事だと思います。
解法
まず、サンプルケースなどを利用して手元で計算すると、
(縦における原点からの距離×縦の辺の長さ、の総和)×(横における原点からの距離×横の長さ、の総和)
のように、縦と横にわけて考えてから、最後に積をとると答えになることがただちにわかります。
縦と横でやっていることは同じなので、あとは1方向に対しての求め方を探ればよいです。
具体例として、2:3で回切るパターンについて考えます。
初期状態は、(原点からの距離,辺の長さ)のペアは(1,1)の一つのみです。
1回切ると、
(1,2/5)と(3/5,3/5)に分かれます。
2回きると、
(1,4/25)、(21/25,6/25)、(15/25,6/25)、(9/25,9/25)の4つに分かれます。
全ての部分を2つに切っていくので、回切ったとき、
個の辺ができます。
また、に切断していくとき、現在辺の長さが
の部分を切ると、あたりまえですが
と
の2つに分かれます。辺は最初1ですので、全ての辺は
で
回切断するうち、何回
を選んだか
という回数で場合分けをすることが可能です。
回切断したときに、
回
を選んだものの個数
とすると、
となります。
次に、回
を選んだ場合の長さを求めます。
回切断したときに、
回
を選んだものの辺の長さ
とすると、
となります。
辺の長さが出せたので、あとは原点からの距離を求めれば終わりになります。
先ほどの続きとして、現在辺の長さがであり、原点からの距離が
である部分についてみてみます。先ほども述べたように、これを
で切ると
と
の2つに分かれます。このとき、長さが
になった辺は、原点からの距離は
のままであり、もう片方の辺の原点からの距離は、
から左側の辺の長さ、すなわち
だけ引いたものになります。
もうすこし見やすくすると、
今原点からの距離がの辺について、
回までで
回
を選んで切断していた場合、次の切断をしたときに辺の原点からの距離は、
を選んだ側
を選んだ側
の2つに分かれます。
これを、を選んだ回数ごとに距離を先に合計しておきます。
回切断したときに
回
を選んだものの原点からの距離の合計
とすると、
となります。
これで必要なものがそろったので、あとは
(原点からの距離)×(辺の長さ)
の総和を求めます。これは
をについて全探索して合計していけば求まります。
最後に、縦と横それぞれについてこの操作を行い、かけあわせれば答えとなります。