179.1

250

人名リストが与えられるので、validなものについてのみ整形しなおして返せ、という問題。


valid判定が煩雑なだけの問題。java.lang.Stringのsplitの仕様を調べないとダメだなぁ、という感じ。スペース区切りにするときにはtrimしてからやる方が良さそう。

600

正方形グリッドからなる地域があって、そこのN点を直線で結ぶように通る。その際に何回別のグリッドへの移動を行うか答えよという問題。ただしN点はいずれも中心を通る。


まず、二点間の中にちょうど中心を通る点がある場合(差分のgcdが1より大きい場合)その点を通るものとして分割してやる。それ以外のケースについては、基本的にx方向の差分とy方向の差分の分だけグリッドを通過するが、どちらも奇数のときだけ斜めに1度移動するので1引いておけばいい。

850

ある二つの値が同時に変化する時に、同じ値になり得るかどうかを、-4999から5000までの任意の整数のペアについて判定し、何組あるかを答えよという問題。変化する値が配列で与えられる。


10000x10000を計算すると終わらないけれど、実際には差分だけ見れば良いので、差が-9999から9999の時について、差を0にできるかどうかを計算し、それぞれの登場回数だけ足してやれば良い。


到達可能かどうかの判定の方が煩雑で、最初は同時に変化することにして、移動する値を計算し、それ以降はそれらの二つのペアについてgcdだけ移動できるとする。差をN増やせるということはN減らせるということでもあるのに注意すれば、ある程度は簡単になるかも知れない。後は差が0の時から開始して、作成可能なすべての差分を計算すればおしまい。