思路:

  这道题和 UVA221 Urban Elevations 思路一样的;用结构体pot存x,y的值;

  用double数组x存下每一个可以做对称轴的点,然后sort,unique,然后遍历每一个对称轴,

  写一个函数看看这个对称轴可不可以完成折叠;怎么看可不可以完成折叠呢?

  首先把一个坐标轴上的点都用 map<pot,bool> 存起来,再遍历一些点看看它的对称点

  在不在坐标轴上,如果都在说明可以折叠。

注意:

  结构体pot要重载 < 才能做map的key。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<map>
 4 #include<algorithm>
 5 using namespace std;
 6 #define maxn 1010
 7 struct pot {
 8     int x, y;
 9     bool operator<(const pot &p)const//重载<
10     {
11         return this->x < p.x || (this->x == p.x&&this->y < p.y);
12     }
13 };
14 map<pot, bool> pic;//每个点在是否在坐标轴上
15 double x[maxn*2];
16 pot p,pots[maxn];
17 int n;
18 bool find(double mx)//以mx为轴可不可以折叠
19 {
20     for (int i = 0; i <= n/2; i++)
21     {
22         pot p1;//p1是以mx为轴的pots[i]的对称点
23         p1.x = mx*2-pots[i].x;
24         p1.y = pots[i].y;
25         if (!pic[p1])//对称点在坐标轴上
26         {
27             return false;
28         }
29     }
30     return true;
31 }
32
33 int main()
34 {
35     int t;
36     scanf("%d", &t);
37     while (t--)
38     {
39         scanf("%d", &n);
40         for (int i = 0; i < n; i++)
41         {
42             scanf("%d%d", &p.x, &p.y);
43             pots[i] = p;
44             pic[p] = true;
45             x[i*2] = p.x;
46             if (i != 0)//两点的中点也可以做对称轴
47                 x[(i-1) * 2 + 1] = (x[(i - 1) * 2] + x[i * 2]) / 2.0;
48
49         }
50
51         sort(x, x + n*2);
52         int m = unique(x, x + n*2) - x;
53
54         bool ok = false;
55         for (int i = 0; i < m; i++)
56         {
57             if (find(x[i]))
58             {
59                 ok = true;
60                 //printf("i=%d x[%d]=%lf\n", i,i,x[i]);
61                 break;
62             }
63         }
64
65         if (ok)
66             printf("YES\n");
67         else
68             printf("NO\n");
69     }
70
71     return 0;
72 }

转载于:https://www.cnblogs.com/fudanxi/p/10383002.html

UVA 1595 Symmetry相关推荐

  1. 5-6 UVA 1595 Symmetry对称轴

    题目大意紫书和原文都讲的非常易懂清晰, 观察给出的数据范围:不超过1000个点,每个点坐标范围在-10000到10000之间! 直接暴力求解就可以了! 整体思路: 因为一撮点要轴对称的话,肯定有一个确 ...

  2. Symmetry UVA - 1595

    不能再摸鱼了,加油! #include <bits/stdc++.h> using namespace std; int main () {int n;cin>>n;while ...

  3. 1595:Symmetry

    Symmetry 我的思路: 开始是想着将所有点都存在set里面,找出对称轴,然后对于每一个点确定其对称点是否存在,但是觉得这样效率似乎太低,就放弃了. 后来想到了这样做:将所有点按x坐标进行排序,若 ...

  4. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  5. WaWa的奇妙冒险(第二周集训自闭现场)

    第二周周记 (一)例题记录 A-简单计算器 (水题,栈的运用) HDU - 1237 Input Output Sample Input Sample Output 理解 AC代码 B-计算 (逆波兰 ...

  6. 算法竞赛入门经典(第2版)—第五章(C++与STL入门)

    文章目录 零碎知识点整理 题目 10474 - Where is the Marble? 101 - The Blocks Problem 10815 - Andy's First Dictionar ...

  7. Uva1595 对称轴

    Uva 1595对称轴 题目描述: 给出平面上N个点,问是否可以找到一条竖线,使得所有点左右对称. 思路: 这个题我的思路是将所有高度(y)相同的点求每组高度的坐标x的平均值,如果总个数N是偶数,那么 ...

  8. 集训der二周目学习(练习题+感悟)

    永动WA题机der二周目学习摘录 (一)有趣的题目 A - 看病要排队 HDU - 1873 Input Output Sample Input Sample Output 对题目的理解 代码 B - ...

  9. UVA Symmetry

    #include <cstdio> #include <iostream> #include <algorithm> #include <set> #i ...

最新文章

  1. 远程桌工具-Remote Desktop Organizer
  2. WIN7安装及配置JDK
  3. Exp7 网络欺诈防范
  4. api地理编码_通过地理编码API使您的数据更有意义
  5. 浅谈HTTP中Get与Post的区别_转
  6. TCP UDP 本地套接字 网络套接字
  7. 蜂鸣器播放青鸟,含曲谱(小萌白新文)
  8. 微擎模块-微信门禁小区物业版(微信开门)
  9. 微型计算机主板usb电源损坏,自已动手彻底解决主板USB供电不足的问题
  10. 用计算机写作文教学反思,语文作文教学反思(精选6篇)
  11. sql with ties_SQL WITH TIES子句
  12. python绘制各种摆线(包括心形线星形线等,超炫酷)
  13. SAP idoc功能够强大: 采购订单下达自动触发销售订单创建
  14. 【误差】方差、标准差、均方误差和均方根误差的区别总结
  15. studio 3T 破解方法(亲测)
  16. 满满的干货!传统备份vs CDP vs CDM
  17. 杰奇采集分页 php,杰奇自定义分页代码,教程及案例
  18. vue创建项目太慢、卡死
  19. 针对东北老公马俊打上海老婆黄佳的看法
  20. 安科瑞高速公路变电所运维云平台解决方案

热门文章

  1. mybatis返回值多个对象
  2. Java设计模式(一)面向对象设计原则
  3. Mongoose aggregate
  4. (二)性能测试的常用术语
  5. 写一个包含【UDP接收】和【TCP发送】的中转站程序
  6. 本地化Microsoft ReportViewer
  7. python是否可以建立数据库_python新建数据库
  8. 【数位dp】LibreOJ - 10166数字游戏
  9. Linux系统信号量实现生产者-消费者问题
  10. 计算机报名无法支付mac,支付宝在Mac电脑中无法登录怎么办?