zoukankan      html  css  js  c++  java
  • Uva 3226 Symmetry

    题目给出一些点的坐标(横坐标,纵坐标),没有重叠的点,求是否存在一条竖线(平行于y轴的线),使线两边的点左右对称。

    我的思路:对于相同的纵坐标的点,即y值相同的点,可以将x的总和计算出,然后除以点的数目,即可得到对称轴的x坐标。所以,对于不同的y值,可以算出这个y值对应的点的对称轴的x坐标,只要观察这些x坐标的值是否相等即可。如果相同,则存在一条竖线满足题意。如果出现不相同,则不存在符合题意的竖线。

    注意点:计算后的x的值可能为小数,故需要用double保存。

    /*
    	UvaOJ 1595
    	Emerald
    	Mon 4 May 2015
    */
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <map>
    
    using namespace std;
    
    int main() {
    	int T;
    	cin >> T;
    	while( T -- ) {
    		int N;
    		cin >> N;
    		map < int,int > yToXsum; // key : the value of y, value : the total value of x in y axis
    		map < int,int > yTimes; // key : the value of y, value : the times that y appears
    		map < int, int >::iterator it;
    		int x, y;
    		while( N -- ) {
    			scanf( "%d%d", &x, &y );
    			if( yToXsum.count( y ) ) {
    				yToXsum[y] += x;
    			} else {
    				yToXsum[y] = x;
    			}
    			if( yTimes.count( y ) ) {
    				yTimes[ y ] ++;
    			} else {
    				yTimes[ y ] = 1;
    			}
    		}
    		double ave; // the average of the x
    		it = yTimes.begin();
    		ave = 1.0 * yToXsum [ it->first ] / it->second;
    		for( it ++; it!=yTimes.end(); it ++ ) {
    			if( ave != 1.0 * yToXsum [ it->first ] / it->second ) {
    				break;
    			}
    		}
    		if( it == yTimes.end() ) {
    			printf( "YES
    " );
    		} else {
    			printf( "NO
    " );
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    js获得动态生成的标签
    自定义字段在List和ClassList等标签里的使用方法
    asp.net dropdownlist 取不到值
    MXCMS新增标签IFrame 包含标签
    JS打印
    Flash图表解决方案 Finger Chart
    推荐个免费的客户端控件
    C#利用反射获取对象属性值
    位置导航MXCMS Position标签说明
    OAuth简介
  • 原文地址:https://www.cnblogs.com/Emerald/p/4480722.html
Copyright © 2011-2022 走看看