346.1

明日のための肩慣らし。

250

A以上B以下の整数で、指定された整数すべての倍数になっているものの数を答えよ、という問題。


Bを超えるまで、指定された整数群の最小公倍数を求めていくだけ。超えなければ除算すれば該当するものの数が分かる。

500

整数配列が与えられるので、(循環して)隣接する要素との差分の最大値が最小となるように並び替えよ、という問題。複数可能な場合は辞書順で最初のものを答える。


差分の最大値を最小にするには、ソートして、先頭と末尾に交互に要素を入れていけば良い。ただ、辞書順で最初にしないといけないので、差分の最大値を決めてから、それを崩さないように貪欲に小さい要素を先頭側に入れていく。具体的には、次の要素が末尾側に入れても指定された差分の最大値を超えない場合は今の要素を先頭側に入れていく。

1000

円がいくつか与えられるので、全部の円の重ね合わせを行った後の、周囲の長さを答えよ、という問題。


二円の交点は、中心差分のatan2から、acos((r^2+d^2-R^2)/2dr)をプラスマイナスした位置にくる。(数式解くだけ。)後は、0から2PIまでの範囲から、交点の間の区間(取り敢えず非負にしてから、2PI刻みで処理する)を除去していく作業を延々とやるだけ。実装幾何にこの点数はどうなのだろうね?