365.1

やるやる言ってやってない。

300

半径Rの円の円周上にある格子点の数を答えよ、という問題。


求め方の式が与えられているので、それを実装するだけ。(疑ってはいけない。)基本的には素因数分解するのと、int溢れに気を付けるのと...。

500

ある整数の集合が与えられる。指定された範囲の整数のうち、Dで割ってM余るものの集合との重複率が高いもの(ただし重複は三個以上ないといけない)の重複率を答えよ、という問題。


可能なDを決めれば、整数集合の全要素について、該当するMを決めて、重複率が求まる。三個以上重複することが条件にあるので、このようなDは整数集合の三つの要素の差分の最大公約数に合致する必要がある。(十分ではない。)ところで、重複する要素数はせいぜい整数集合の数に合致するので、もしあるDについて三つの要素が合致するのなら、その値よりもはるかに小さいDについて吟味するのは意味がない。ということで、三つの要素について、差分のGCDを求めて、適当に閾値を決めて、それよりも小さいものを無視し、残ったものを要素数以下の整数で割ったものについて吟味してやれば十分。(実際には後半をやらなくても正解になるっぽいが、たまたま?)

1000

有向グラフが与えられるので、フローの向きに矛盾しないような番号付けのうち、辞書順で最小のものを答えよ、という問題。


割り当ててみて、以降の割り当てが可能か試すだけ。今なら450くらいで出そう。