UVa 1595 Symmetry (set && math)
题意:给出n个在直角坐标系上的点,问你能不能找出一条竖轴(即垂直于x的轴)使得所有的点根据这条轴对称,能则输出YES,否则输出NO
分析:首先需要找到对称轴的值,将所有n个点的x轴的值加起来然后去除以n便可得(证明在下方)。对于各个点的处理就是将每一个点的x,y组成一个pair丢到set里面去让其自动根据x轴的大小来排序,然后遍历一遍set,根据对称轴信息就可以得到对称点,如果有对称点不在set里面那就是NO的情况,否则反之! 但是在偶数个点的时候,对称轴的值会出现小数点,涉及到精度问题,那有没有办法来避免这个问题呢?实际上是有的,先说结论:2*sum = |x1|*n + |x2|*n (sum是所有点x轴的值的和,x1和x2是对称点,n是点的个数),有了这个,便能很快根据已知点找到对称点了!以下给出证明(参考自:http://blog.csdn.net/bryant_hao/article/details/51914988 )
公式证明: 首先,我先假设一个平面上有n个点。
并且假设这n个点都是对称的。(x1,x2,x3,x4,x5……xn)
就是平面上有一个对称轴,比如所有左边的点关于这个对称轴对称之后都可以在右边找到一个相对应的点。
那么求对称轴的横坐标呢就是(x1+xn)/2+(x2+x(n-1))/2……;
假如恰好是偶数个点,则对称轴的横坐标就是全部加起来除以点的个数了。
如果是奇数,则对称轴上肯定有一个点。 对称轴的横坐标我们还是可以加起来除以点的个数的:
(x1+xn)/2=(x1+xi+xn)/3
xi=(x1+xn)/2
同理:(x1+xn+x2+x(n-1))/4=(x1+x2+xn+x(n-1)+xi)/5
则奇数偶数统计起来一起考虑就是:对称轴的横坐标其实就是所有的点加起来除以所有点的个数;
sum*2-x1得到的是对称轴另一边的点的横坐标x2,这个地方也需要证明一下。
sum呢就是把所有点的横坐标都加起来了,其实这个时候sum就是对称点的横坐标放大n被之后的对称轴的横坐标。
由于两点到对称轴横坐标的距离是相等的
则可以得出式子:
sum-|x1|=xn-sum;
2*sum=xn+|x1|;
#include<bits/stdc++.h>
using namespace std;
set< pair<int, int> > s;
int main(void)
{
int nCase;
scanf("%d",&nCase);
while(nCase--){
int n;
s.clear();
scanf("%d",&n);
;
; i<n; i++){
int x, y;
scanf("%d%d",&x, &y);
sum+=x;
s.insert(make_pair(x*n, y));
}
bool flag = true;
for(set< pair<int, int> >::iterator it=s.begin(); it!=s.end(); it++){
*sum - (*it).first, (*it).second))){
flag = false;
break;
}
}
if(flag) puts("YES");
else puts("NO");
}
;
}
UVa 1595 Symmetry (set && math)的更多相关文章
- uva 1595 - Symmetry
思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值): 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有 ...
- uva 1595 Symmetry“结构体”
给出平面上N(N<=1000)个点.问是否可以找到一条竖线,使得所有点左右对称,如图所示: 则左边的图形有对称轴,右边没有. Sample Input 3 5 -2 5 0 0 6 5 4 ...
- UVa 1595 Symmetry(set)
We call a figure made of points is left-right symmetric as it is possible to fold the sheet of paper ...
- UVa 1595 (水题) Symmetry
颓废的一个下午,一直在切水题,(ˉ▽ ̄-) 首先如果这些点是对称的话,那么它们的对称轴就是x = m,m是横坐标的平均值. 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这 ...
- 【UVA】1595 Symmetry(模拟)
题目 题目 分析 理清思路,上模拟. 代码 #include <bits/stdc++.h> using namespace std; const int maxn=100 ...
- Symmetry UVA - 1595
The figure shown on the left is left-right symmetric as it is possible to fold the sheet of paper ...
- UVA 10400 Game Show Math (dfs + 记忆化搜索)
Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...
- Uva 3226 Symmetry
题目给出一些点的坐标(横坐标,纵坐标),没有重叠的点,求是否存在一条竖线(平行于y轴的线),使线两边的点左右对称. 我的思路:对于相同的纵坐标的点,即y值相同的点,可以将x的总和计算出,然后除以点的数 ...
- UVa 10400 - Game Show Math 游戏中的数学 dfs+判重
题意:给出一些数字和一个目标数字,要求你在数字间添加+-*/,让表达式能达到目标数字,运算符号的优先级都是一样的. 由于数据量很大,本来想用map<string>判重的,结果还是超时了,然 ...
随机推荐
- Mysql优化深度解析
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...
- kafka安装使用配置1.1
官方文档 rz上传到/usr/local/下 解压 tar xzvf 文件 改名 mv 文件 名字 环境变量 vi /etc/profile export KAFKA_HOME=/usr/local/ ...
- skiplist(跳表)的原理及JAVA实现
前记 最近在看Redis,之间就尝试用sortedSet用在实现排行榜的项目,那么sortedSet底层是什么结构呢? "Redis sorted set的内部使用HashMap和跳跃表(S ...
- Css常用的技巧
一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读. 具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...
- Hive编程指南读书笔记(1):
1.Mapreduce是一种计算模型,将计算任务分割成多个可以在服务器集群中并行执行的任务,然后分散到一群家用的或者服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性. 2.mapreduce的两 ...
- vsCode 前端插件推荐-和插件配置
参考自网站:https://segmentfault.com/a/1190000011779959 插件安装完成之后,还要对一些插件进行配置,例如: vetur默认配置, 配置的过程: 打开 文件 & ...
- 【Java面试题】解释内存中的栈(stack)、堆(heap)和静态存储区的用法
Java面试题:解释内存中的栈(stack).堆(heap)和静态存储区的用法 堆区: 专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型 ...
- 转:spring中InitailizingBean接口的简单理解
转自:https://www.cnblogs.com/wxgblogs/p/6849782.html spring中InitializingBean接口使用理解 InitializingBean接 ...
- 利用python3 爬虫 定制版妹子图mzitu爬取
在刚开始学爬虫的时候,用来练手的基础爬虫就是爬取各种妹子图片,前几天同时说了这个,便准备随便写一个...最后发现真是三天不练..什么都记不住了!!所以花了政治一天重新写了一个爬虫程序,并且支持按照时间 ...
- SpringMVC @Valid,@RequestBody,@RequestParam标注参数时,进行Postman测试
@Valid(post请求) 可与@RequestBody一起使用 > (@RequestBody @Valid User user) @RequestBody(post请求) 这里的requi ...