UVA 10585 Center of symmetry

题意:给出一个点集,问这个集合有没有中心点使点集对称,这个点可以是点集中的点也可以不是点集的点。

解法:一开始我枚举每两个点连线的中点……结果T了orz当时也不知道怎么想的……

将点按横坐标排序,如果点集有中心点则中心点一定是排序后排在中间的那个点(n为奇数)或者中间两个点的连线中点(n为偶数),然后判断一下是不是中心点即可。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
struct node
{
    int x, y;
    bool operator < (const node& tmp) const
    {
        if(x == tmp.x)
            return tmp.y < y;
        return tmp.x < x;
    }
} point[10005];
map <node, int> m;//打一个点的表
int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        m.clear();
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &point[i].x, &point[i].y);
            m.insert(pair <node, int> (point[i], 1));
        }
        int ans = 1;
        sort(point, point + n);
        node center;
        if(n & 1)
        {
            center.x = point[n / 2].x * 2;
            center.y = point[n / 2].y * 2;
        }
        else
        {
            center.x = point[n / 2 - 1].x + point[n / 2].x;
            center.y = point[n / 2 - 1].y + point[n / 2].y;
        }
        for(int k = 0; k < n; k++)//判断是否每个点都能找到对应对称点
        {
            node tmp;
            tmp.x = center.x - point[k].x;
            tmp.y = center.y - point[k].y;
            if(m.find(tmp) == m.end())
            {
                ans = 0;
                break;
            }
        }
        if(ans)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}
时间: 2024-10-13 19:48:02

UVA 10585 Center of symmetry的相关文章

POJ 1859 The Perfect Symmetry &amp;&amp; POJ2526 Center of symmetry(思维题)

博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40680981 POJ 1859 : The Perfect Symmetry 题目大意: 给你n个点的座标,你的任务是判断是否存在一个中心,使得这些点中心对称.一个点集有中心对称点的条件是,存在一个点s,对于每一个点p,都存在另一个点q使得p - s = s - q . 解题思路: 既然要找中间的点,那么对于中间的点,肯定会有两边对称的点,那么说,点集排序之后,先找到排序后的

UVa 1595 (水题) Symmetry

颓废的一个下午,一直在切水题,(ˉ▽ ̄-) 首先如果这些点是对称的话,那么它们的对称轴就是x = m,m是横坐标的平均值. 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有一个不在的话,说明不能构成对称图形. 1 #include <cstdio> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 6 struct Point 7 {

poj 2526 Center of symmetry 哈希查找

题意: 给n个不同的点,问是否存在一个点使得这n个点关于它两两对称. 分析: 首先确定这个对称中心的坐标,然后对每个点哈希查找它的对称点. 代码: //poj 2526 //sep9 #include <iostream> using namespace std; const int maxN=10024; const int hashlen=1000023; const int mod=40013; struct Point { int x,y; }p[maxN]; struct Node

codeforces 140F New Year Snowflake

F. New Year Snowflake As Gerald ..., in other words, on a New Year Eve Constantine prepared an unusual present for the Beautiful Lady. The present is the magic New Year snowflake that can make any dream come true. The New Year snowflake consists of t

code forces 140F New Year Snowflake

F. New Year Snowflake As Gerald ..., in other words, on a New Year Eve Constantine prepared an unusual present for the Beautiful Lady. The present is the magic New Year snowflake that can make any dream come true. The New Year snowflake consists of t

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

比只支有改给关方加山

但是傲世嗜血却还未来得及高兴便已经发现我平举追星弓一枚冰冷的铁箭直直的顶在他的脖子上 地将军威武必会横扫叛逆为我等报仇的 除此之外还盈余了各项资源超过点于是我选择建造了一个级的步兵营花掉了每种资源点几个民工出现敲敲打打建造从领地仓库了取出了木材石料等材料很快的一个简陋的草棚出现门前竖立着一排兵器架利剑大刀之类的兵器摆在上面 打开窗一股清香飘来是桂花树的香味远远可见院落里一棵绿树初秋正是桂花飘香的季节啊稻花香眼里有些血丝显然一夜睡眠都不是很好我自己绑了绷带了昨夜也没有照顾她不过既然稻花香离开林傲加

进准且一务社红写求

而且这套皮甲最可贵的莫过于加了物理攻击力总所周知无论是此刻还是弓箭手都是以敏捷著称的职业追求的无非是高敏捷高致命一击率这样一来攻击力就有了巨大的缺损也造成了弓箭手和刺客大多只能控制布甲职业的尴尬局面而现在这套皮甲居然加了高达的物理攻击力我无异于是雪中送炭足以改变一个玩家的方向 此时的恶狼岭变得一片沉寂我走马观花般的飞奔而过毫无阻拦的就来到了那几个猎户的营地掏出一百张剑狼毛皮然后把剑狼王的头颅也直接抛在了地上 不过可恨的是系统每分钟就会通报一下时间甚至还有我的坐标就像是生怕别人不来争夺领地一般带我

四大直辖市政府班子都有新面孔 他们都是谁?

大家又是微微一惊很显然这些法师型怪物的防御力实在是太低了地狱战马看向我的目光似乎柔和了一些了不到三秒钟的时间血饮天下已经翻身而起一脸恼羞成怒的样子手持阔剑便打出了二连击横扫千军+裂地斩 而我现在的刷怪则非常的轻松一身极品装备加上了一个超级NB的龙甲术之后级的怪物根本就破不了我的防御几轮千刃箭之后直接换上寒冰剑刷刷几剑把主动技能丢光损失的气血也就吸回了大半再加上一个血瓶OK满血了 Fortunately, however, God, who had thus permitted this evil