题意:给出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)的更多相关文章

  1. uva 1595 - Symmetry

    思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值):   把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面.   如果有 ...

  2. uva 1595 Symmetry“结构体”

    给出平面上N(N<=1000)个点.问是否可以找到一条竖线,使得所有点左右对称,如图所示: 则左边的图形有对称轴,右边没有.   Sample Input  3 5 -2 5 0 0 6 5 4 ...

  3. 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 ...

  4. UVa 1595 (水题) Symmetry

    颓废的一个下午,一直在切水题,(ˉ▽ ̄-) 首先如果这些点是对称的话,那么它们的对称轴就是x = m,m是横坐标的平均值. 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这 ...

  5. 【UVA】1595 Symmetry(模拟)

    题目 题目     分析 理清思路,上模拟.     代码 #include <bits/stdc++.h> using namespace std; const int maxn=100 ...

  6. Symmetry UVA - 1595

      The figure shown on the left is left-right symmetric as it is possible to fold the sheet of paper ...

  7. UVA 10400 Game Show Math (dfs + 记忆化搜索)

    Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...

  8. Uva 3226 Symmetry

    题目给出一些点的坐标(横坐标,纵坐标),没有重叠的点,求是否存在一条竖线(平行于y轴的线),使线两边的点左右对称. 我的思路:对于相同的纵坐标的点,即y值相同的点,可以将x的总和计算出,然后除以点的数 ...

  9. UVa 10400 - Game Show Math 游戏中的数学 dfs+判重

    题意:给出一些数字和一个目标数字,要求你在数字间添加+-*/,让表达式能达到目标数字,运算符号的优先级都是一样的. 由于数据量很大,本来想用map<string>判重的,结果还是超时了,然 ...

随机推荐

  1. [转帖]一张图让你看懂InnoDB

    一张图让你看懂InnoDB 2018年05月10日 10:02:34 灵魂自由的忙人 阅读数 299 https://blog.csdn.net/xiaoyi23000/article/details ...

  2. 解决PowerDesigner提示This data item is already used in a primary identifier

    解决PowerDesigner提示This data item is already used in a primary identifier 解决PowerDesigner提示This data i ...

  3. Web前端开发中的小错误

    Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...

  4. spark精华面试题

    1.driver的功能是什么? 1)一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点: 2)功能:负责向集群申 ...

  5. 前端框架:Angular React 和 Vue的比较

    前端这几年的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES6&7,coffeescript,typescript等: 2.开发框架,如Angular,React, ...

  6. react + antd Form表单校验

    非空限制 {getFieldDecorator('name', { rules: [{ required: true, message: '名称不能为空', }],})( <Input plac ...

  7. SpringBoot之使用Druid连接池以及SQL监控和spring监控

    一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  8. 深入简出mysql--第一部分

    第二章: 1.sql分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义. 常用的语句关键字主要包括 ...

  9. Nginx默认配置语法

    Nginx默认配置语法 1. 我们进入  /etc/nginx/目录下,打开  nginx.conf文件 2. 我们来解析下 这里面标签和各模块的作用 # 设置nginx服务的系统使用用户 user ...

  10. 关于IDEA顶部栏隐藏问题,

    那天手残,点到了 IDEA顶部菜单栏 > View > Appearance >Main Menu ,然后取消了勾选 然后就成了这个样子,没了顶部栏,恢复不过来,不知道如何进行设置 ...