题意:给出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. PTA(Basic Level)1029.旧键盘

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 2 行中分别给出应该输入的文字.以及 ...

  2. GS7 安装使用Oracle19c 客户端的说明

    1. 最近Oracle放出了 windows版本的oracle19c的安装文件(具体时间不详, 自己知道的时候比较晚了) 2. 发现文件其实比较多如图示: 3. 经过自己测试实现发现 不能使用  如下 ...

  3. hive与hbase的交互简要示意

    建表 create external table if not exists hive2hbase( id int, ---> 对应hbase的rowkey (即下面的:key) age int ...

  4. 建立分表sql执行语句批量生成工具(自创)

    public void addTable (){ String add=""; for(int i=1;i<13;i++){      for(int j=0;j<60 ...

  5. myeclipse中jpa的安装以及jpa reverse engining

    myeclipse中jpa的安装以及jpa reverse engining 安装 右击 Configure Facets, Install JPA jpa reverse engining 1.db ...

  6. linux 使用tmux

    一. 什么是tmux 1.1. tmux 是两个单词的缩写,即“Terminal MultipleXer”,意思是“终端复用器“ 1.2. tmux 结构 1.2.1. tmux主要由三层: < ...

  7. session+验证码 学习

    分析 LoginServlet类 @WebServlet("/loginServlet") public class LoginServlet extends HttpServle ...

  8. scrapydWeb安装和使用

    1. 安装:pip install scrapydweb 2. 启动:scrapydweb 第一次执行,当前目录会生产配置文件:scrapydweb_settings_v8.py 配置账户和密码: # ...

  9. 06 Python之列表和元组

    1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操作 添加: 1 ...

  10. openlayers之天地图为底图 叠加其他底图 加载遇到的各种报错

    今天以前使用天地图为底图时,map里source的定义:http://t3.tianditu.com~~~ 今天突然报跨域的错误,原有地址访问受限,可是key值是有的 最后发现就是前半段的原因 将前半 ...