题目大意
小明有n个点,编号为1∼n,编号为i的点的坐标为 (xi,yi)。小明想画一些圆,每个圆都以圆点(0,0)为圆心,且经过某个小明拥有的点,每个圆的半径不相等。假设点(x,y)到圆心(0,0)的距离为半径r,则必然存在r^2 = x^2 + y^2。小明希望按照圆的半径由小到大来画圆,所以他会先画半径最小的圆。当小明画第p个圆的时候,若这个圆经过的点的编号为q,则小明需要花费r^2 *(p+q)的精力。若两个圆的半径相等,为了节省精力,小明只会画编号较小的那个圆。求按这样的画法,小明需要花费的总精力。
【数据范围】
对于60%的数据,1≤n≤10^3,1≤xi,yi≤10^3
对于100%的数据,1≤n≤10^5,1≤xi,yi≤10^6
输入格式 输入第一行,包含一个整数n(1≤n≤10^5)。
接下来n行,每行包含两个整数(xi,yi)(1≤xi,yi≤10^6) 表示第i个点的坐标。
输出格式 输出一行,包含1个整数,表示小明需要花费的总精力。
由于答案可能很大,只需要输出答案对10 ^ 9 + 7取模的结果。
输入/输出例子1 输入:
4
1 2
2 1
1 3
2 2
输出:
118
样例解释 编号为1的点,坐标为(1,2),则经过此点的圆的半径r,满足r^2=11+22=5
编号为2的点,坐标为(2,1),则经过此点的圆的半径r,满足r^2=22+11=5
编号为3的点,坐标为(1,3),则经过此点的圆的半径r,满足r^2=11+33=10
编号为4的点,坐标为(2,2),则经过此点的圆的半径r,满足r^2=22+22=8
已知小明按照半径由小到大画圆,所以
第1个圆经过编号1,其半径满足 r^2=5,耗费的精力为5*(1+1)=10,
第2个圆经过编号4,其半径满足 r^2=8,耗费的精力为8*(2+4)=48,
第3个圆经过编号3,其半径满足 r^2=10,耗费的精力为10*(3+3)=60,
所以小明总共绘制了3个圆,并且花费的总精力为118
c++
求代码