题意:给出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. Logger Rate Limiter

    Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

  2. 【转贴】使用sar进行性能分析

    使用sar进行性能分析 https://www.cnblogs.com/bangerlee/articles/2545747.html 很早之前就看过 但是自己一直没用过.. 2012-06-12 0 ...

  3. spring请求多方式

    <!-- 使表单可以使用GET,.POST. HEAD.OPTIONS.PUT.DELETE.TRACE方式提交--> <filter> <filter-name> ...

  4. 2019-2020Nowcoder Girl初赛题解

    写了一天计算几何,心态崩了,水一篇题解休息休息. emmmm,如果您是一名现役OIer/CSPer,那看这篇文章也许并不能在你的生命中留下些什么(潮子语录),因为相比NOIP/CSP这个比赛其实比较简 ...

  5. Codeforces 1194E. Count The Rectangles

    传送门 看到 $n<=5000$,直接暴力枚举左右两条竖线 然后考虑怎么计算高度在某个范围内,左端点小于等于某个值,右端点大于等于某个值的横线数量 直接用权值树状数组维护当前高度在某个区间内的横 ...

  6. JS基础_其他进制的数字(了解)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. JavaScript冒泡排序法实现排序操作

    var arr = [10,8,6,9,1,7,1,13,5,1,9]; //冒泡排序 function bubbleSort(tmpArr){ for(var i = tmpArr.length-1 ...

  8. 大型分布式爬虫准备 scrapy + request

    那些高手 爬虫好文 而我避免这些问题的方式,控制台清除所有定时 var id = setInterval(function() {}, 0); while (id--) clearInterval(i ...

  9. 转载:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    转自:https://www.cnblogs.com/findumars/p/6309048.html 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...

  10. Arch Linux 安装 ibus-rime

    参考网站 default.custom.yaml 在方案選單中添加五筆.雙拼 rime-wubi 操作方式 # 删除原rime(可选) sudo pacman -Rs ibus-rime ibus-t ...