题目要求
有n件礼物藏在房间里,第 i 件礼物在二维平面的 (xi,yi) 这个点上,小明刚开始在原点 (0,0) ,他很笨,每次只会关注还没拿到的 x 最小的礼物,如果有多个,他会看 y 最小的,然后从当前位置沿直线走到那个礼物的位置停在那里拿走礼物,然后再去找下一个要拿的礼物。小明每一次从目前所在的点走到要拿的礼物的点需要消耗的体力为两点距离的平方。
小明想知道如果按照这样的方法拿完所有礼物的话,一共要消耗多少体力,由于答案可能过大,你只需要输出这个结果对 (10的九次方)10^9+7 取模后的结果就可以了。
输入
第一行,一个正整数 n(1≤n≤105)。
接下来 n 行,每行两个正整数 xi,yi(1≤xi,yi≤109)。
2
1 2
3 4
输出
输出一行,包含一个整数,表示蒜头君消耗的体力对 (10的九次方)10^9+7 取模后的结果。
13
思路
使用结构体储存每一个礼物坐标的x,y值,再利用取模的性质获取答案并输出
(注意,不能直接拿每次拿礼物时两点距离的平方直接加在一起取模,数据太大,long long int 类型存不下)
代码
#include<iostream>
#include<algorithm>
using namespace std;
struct point//定义结构体
{
int x;//x坐标
int y;//y坐标
};
point a[100000];
int p(point a,point b)
//algorithm 库里的函数sort允许自定义排序规则函数,要比自己写排序函数省时间的多
{
if(a.x!=b.x) return a.x<b.x;