ABC191 D Circle Lattice Points
まず原点を中心とした半径が整数とした円における格子点の個数を考える. $ R \leq 1000のときは円が収まる$ 2R×$ 2Rの正方形内の格子点について, $ x^2 + y^2 \leq R^2かどうか調べればよい. しかしこの問題はそれだと間に合わない. ここで格子点の個数には単調性があることを利用する. ひとまず第1・2象限に限定して考えると, 格子点が存在するという範囲の右端を円の上から見ていって差分更新することで$ O(R)で解くことができる.
さて, 元の問題を考える. そのままやると小数なので誤差が出てしまうので, 整数の形にして考える. そこで入力では小数点以下$ 4桁まで与えられるが, $ 10000倍しておけば整数の形にしてほかの部分も$ 10000倍して考えることで問題を解くことができる. ただし入力を$ 10000倍するパートで普通に$ 10000倍すると誤差が出てしまう. ここでSTLのround関数というものを用いて四捨五入することで正しく$ 10000倍できる. $ int(x \cdot 10000 + 0.5)で四捨五入しようとしても, $ xが負の場合$ 0に近くなるようになってしまい正常に動作しないことに注意.