文章目录

  • 题目要求
  • 思路
  • 代码
    • 代码知识点重点 (不懂看我)
      • 1 sort
      • 2 取模

题目要求

有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;//返回true or falseelse return a.y<b.y;//返回true or false
}int main()
{long long int i,sum=0,m=1000000007;//定义变量,m储存10的九次方+7,方便使用long long int n,x,y;//定义变量cin>>n;for(i=1;i<=n;i++){scanf("%d %d",&a[i].x,&a[i].y);//输入数据}sort(a+1,a+1+n,p);//使用algorithm 下的 sort 函数进行排序a[0].x=0;a[0].y=0;//初始化 原点 (0,0)for(i=1;i<=n;i++){x=a[i].x-a[i-1].x;y=a[i].y-a[i-1].y;//分别获取两点距离sum+=(x*x)%m+(y*y)%m;//取模sum%=m;//取模}cout<<sum<<endl;//输出
}

代码知识点重点 (不懂看我)

1 sort

int p(point a,point b)
//algorithm 库里的函数sort允许自定义排序规则函数,要比自己写排序函数省时间的多
{if(a.x!=b.x) return a.x<b.x;//返回true or falseelse return a.y<b.y;//返回true or false
}sort(a+1,a+1+n,p);

sort 允许自定义排序规则

在排序时向自定义的函数传递两个数据,
比如:
在示例代码中,如果a.x<b.x,那么在数组里a 就会排在b 前面,< 本身就是一种函数,返回布尔值

2 取模

大家对于这一段可能有些疑惑,到底啥意思呢?

 for(i=1;i<=n;i++){x=a[i].x-a[i-1].x;y=a[i].y-a[i-1].y;//分别获取两点距离sum+=(x*x)%m+(y*y)%m;//取模sum%=m;//取模}

其实是基于一个取模的性质,用公式表示为

(a+b)%m = (a%m+b%m)%m

公式的证明方式有点复杂,不具体说了,大家记住就好。

它甚至还有兄弟

(a+b)%m = (a%m+b%m)%m
(a-b)%m = (a%m-b%m)%m
(a*b)%m = (a%m*b%m)%m

以上就是本文章所有内容,如果有写的不清楚的地方,请留步评论区~~

如果本文有帮助到你进步,请留下一个赞。你的赞是对我最大的鼓励!
信息学奥赛拔高题例题,我会在接下来的日子里坚持更新哒~~

C++ 信息学奥赛拔高题例题 1 (含题目,代码,知识点讲解)相关推荐

  1. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  2. 信息学奥赛真题解析(笨鸟)

    2020年全国信息学线上测试活动_普及组_T4   笨鸟 [题目描述] 小王特别喜欢玩flappy birds,但是他比较菜,所以向大家寻求帮助,游戏规则大家都懂,横坐标+1时,点一下屏幕,纵坐标+1 ...

  3. 信息学奥赛一本通(1090:含k个3的数)

    1090:含k个3的数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 42180     通过数: 23333 [题目描述] 输入两个正整数m和k,其中1< ...

  4. 信息学奥赛真题解析(美国信息学回文数)

    美国信息学奥林匹克竞赛题目(回文数) 每年NOI,NOIP(或CSP)都会参考美国的题目. 题目描述 题目原文: Palindromes are numbers that read the same ...

  5. 信息学奥赛一本通题库1005 地球人口承载力估计

    [题目描述] 假设地球上的新生资源按恒定速度增长.照此测算,地球上现有资源加上新生资源可供x亿人生活a年,或供y亿人生活b年. 为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人? [输入 ...

  6. 信息学奥赛一本通题库1004 字符三角形

    [题目描述] 给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形. [输入] 输入只有一行,包含一个字符. [输出] 该字符构成的等腰三角形,底边长5个字符,高3个字符. [输入样例 ...

  7. 信息学奥赛真题解析(小凯的疑惑)

    [NOIP 2017 提高组 DAY1 T1]小凯的疑惑 [题目] 题目描述: 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有无数个.在不找零的情况下,仅凭这两种金币,有些物 ...

  8. 信息学奥赛一本通题库1000 入门测试题目

    [题目描述] 求两个整数的和. [输入] 一行,两个用空格隔开的整数. [输出] 两个整数的和. [输入样例] 2 3 [输出样例] 5 [题目思路] 无 [参考代码] #include<bit ...

  9. 信息学奥赛一本通 1000:入门测试题目

    目录 代码呈上: 题目要求: 代码解析: 代码呈上: #include<iostream> using namespace std; int main(){int a, b, c;cin& ...

最新文章

  1. Vue.js用法详解(一)更新中~
  2. DataGrid分页使用小结
  3. JavaScript实现使用 BITWISE 方法查找集合的幂集算法(附完整源码)
  4. Angular jasmine单元测试框架spec的运行时数据结构
  5. spring体系结构_了解Spring Web应用程序体系结构:经典方法
  6. 情人节表白代码(2)
  7. 火山安卓简单分组列表框
  8. css 使用本地字体
  9. 流体力学CFD前处理软件-Gambit
  10. 定时刷新页面 html,js实现定时刷新页面的代码
  11. 【UVA 1589 --- Xiangqi】
  12. Docker - 札记 - Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon runn
  13. POI excel单元格中内容换行
  14. 剑指offer_3 -- 构建乘积数组
  15. 你真的了解C语言 if - else 、bool(布尔值)、浮点数损失吗 ?
  16. 第二章 核心动画渲染框架
  17. base64格式图片数据转为图片格式
  18. MySQL5.7 固态盘性能设置_MySQL 5.7 安装完成后,立即要调整的性能选项
  19. 终端定制行业分销初步设计
  20. Spring之完整版学习笔记

热门文章

  1. 《区块链原理、设计与应用》荣获2018年度畅销图书奖!
  2. 真北读书 | 高标准才能《质量免费》
  3. nanomsg-pynng库的简单学习笔记
  4. 1015 计算器的改良 (200行代码解决;巨捞;巨烦)
  5. 智源大会倒计时,参会大数据发布:实名注册超2万,名校名企知名机构云集,来自17个国家(附大会详细日程)...
  6. 记录h5从webview分享纯图片到微信分身不成功
  7. 学习《码农翻身》之精进
  8. java项目测试环境搭建
  9. oa系统服务器安装包,oa系统在服务器安装
  10. 荣耀智慧屏升级鸿蒙,鸿蒙打造 未来电视就这样!荣耀智慧屏PRO深度评测