TopCoder SRM 436 Div2

まあいいだろう。Hardは解法分かってたんだけど、BigIntegerゲーで時間足りなくなった。

Room内1位、Division内33位で 10941210

Div1復帰だよ!

250 FriendScore

ソーシャルネットワークで一番人気ある人を決めたい。そこで、互いに友達である人の数と、間接的に友達(AとCが友達で、BとCが友達のときの、AとB)である人の数を合計して一番多い人が人気があるものとする。一番多い人は何人その関係の人がいるか。

やるだけ。

500 BestView

高層ビルが連続で建ってて、i個目のビルを(i, 0)-(i, 高さ)の線分とみなす。あるビルAからあるビルBが見える条件は、AとBの屋根を結んだ線分がどのビルとも触れず、交わらないことである。一番多くのビルを見ることができる場合、いくつのビルを見ることができるか。

AとBの屋根を結んだ直線の傾きを計算して、交差してるかチェックするだけ。

1000 DigitsSwap

ある数x, yが文字列形式で与えられる。任意のiについてx[i]とy[i]を交換する作業をちょうどswaps回行って、結果のx, yの積が最大になるようにしたとき、その積を求めよ。

できるだけ積が最大になるように交換を繰り返す。swaps回行っても最大の積にたどり着けない場合は途中のまま、その積を返す。swaps回行う前に最大の積にたどり着いた場合は、残り回数が偶数ならば最大の積を返し、奇数ならば影響の少ない1の位を入れ替えてその積を返す。

解法はこれで合ってる(と思う)けど、積がでかいので多倍長演算が必要。C#になかったので焦って時間なくなった。