1.题目描述:点击打开链接

2.解题思路:判断是否对称只需要看x坐标,因此可以先将每个y值分配一个ID;先判断是否自对称,如果都是,进一步判断所有自对称的对称轴是否都相同,注意用对称轴坐标的二倍来判断,尽量避免浮点数的使用。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<cassert>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<cstring>
#include<functional>
using namespace std;
const int maxn = 1000 + 10;
vector<int>dot[maxn];
vector<int>arr;
map<int,int>yid;
int sym[maxn];
int ID(int y)
{if (yid.count(y))return yid[y];else{arr.push_back(y);yid[y] = arr.size() - 1;return yid[y];}
}
bool is_sym(int p)
{int len = dot[p].size();if (len == 1 || len == 2) return true;else if (len % 2){int mid = len / 2;int x = dot[p][mid] * 2;for (int i = 0; i < mid;i++)if (dot[p][i] + dot[p][len - i - 1] != x)return false;return true;}else{int mid = len / 2;int x = dot[p][0] + dot[p][len - 1];for (int i = 0; i < mid;i++)if (dot[p][i] + dot[p][len - 1 - i] != x)return false;return true;}
}int main()
{int T;cin >> T;while (T--){int n;int flag = 1;memset(sym, 0, sizeof(sym));arr.clear();yid.clear();for (int i = 0; i < maxn; i++)dot[i].clear();cin >> n;for (int i = 0; i < n; i++){int x, y;cin >> x >> y;dot[ID(y)].push_back(x);}int len = arr.size();for (int i = 0; i < len; i++)sort(dot[i].begin(), dot[i].end());for (int i = 0; i < len;i++)if (!is_sym(i)){flag = 0;break;}elsesym[i] = dot[i][0] + dot[i][dot[i].size() - 1];if (flag){int x = sym[0];for (int i = 0; i < len;i++)if (sym[i] != x){flag = 0;break;}}if (flag)cout << "YES" << endl;elsecout << "NO" << endl;}return 0;
}

习题5-6 对称轴 UVa1595相关推荐

  1. 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...

  2. Uva1595 对称轴

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

  3. UVA1595(对称轴)

    作者:xq的acm之路. 题目描述:给出平面上N(N<=1000)个点.问是否可以找到一条竖线,使得所有点左右对称. 思路:求出左右两边的最远的点,求出对称轴,然后枚举各个点就能ac. 代码如下 ...

  4. 函数最值题目及答案_关于函数的习题及答案

    关于函数的习题及答案 1.(2010年高考天津卷)设a=log54,b=(log53)2,c=log45,则() A.a<c<b B.b<c<a C.a<b<c D ...

  5. 算法(第四版)C# 习题题解——1.3

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  6. c语言第1章以下说法错误的是,计算机等级考试c语言程序设计习题

    计算机等级考试c语言程序设计习题 第1章 C语言程序设计概述 一.选择题 1.下列关于计算机语言的叙述中,正确的是_______. A.在计算机语言中,只有机器语言属于低级语言 B.高级语言的源程序可 ...

  7. 已知小红今年12岁c语言编程,C语言程序设计第轮复习习题.doc

    C语言程序设计第轮复习习题 第1章 C语言概述.以下叙述正确的是 . A.在C程序中,main函数必须位于子程序的最前面 B.C程序的每一行中只能写一条语句 C.在对一个C程序进行编译的过程中,可发现 ...

  8. pch在c语言中占内存字节数,2018年9月计算机二级C语言考试章节习题及答案(6).docx...

    2018年9月计算机二级C语言考试章节习题及答案(6) 第2章 C程序设计的初步知识 2.3 整型数据 1[单选题] 用8位无符号二进制数能表示的最大十进制数为( ) A.127 B.128 C.25 ...

  9. 慕课python课后作业_python基础1习题练习

    python基础1习题练习: #encoding:utf-8 #1.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! name=input('na ...

最新文章

  1. [JavaWeb基础] 025.JAVA把word转换成html
  2. 计算机网络·物理层练习题
  3. JQuery-让Ajax变的更简单
  4. hse不起振 stm8_STM8S207使用外部24M晶振不起振的解决办法
  5. 对广义表L=((a,b),(c,d),(e,f))执行操作tail(tail(L))的结果是 ()
  6. 基础知识(十五)Cmake
  7. Linux实时/高性能任务独占CPU的操作
  8. android标题栏添加按钮_几行代码实现Android通用标题栏(轻松向左右两侧添加Menu)...
  9. u-boot工作流程
  10. 一道把递归、链表、引用、双指针都结合的题——回文链表
  11. [Java] 蓝桥杯ALGO-98 算法训练 数位分离
  12. 进度计划中的时间相关术语
  13. ReviewBoard+SVN配置强制code review
  14. 突然有一天,我老无所依
  15. Procmon 结果列代码及其含义Detail 列使用的文件属性代码
  16. excel去除重复处理
  17. 笔记本性能参数有哪些
  18. KeyBert、TextRank等九种本文关键词提取算法(KPE)原理及代码实现
  19. LVGL8.2移植学习
  20. 第15讲:Python列表对象的反转与排序

热门文章

  1. discuz 应用中心访问及下载较慢解决方法
  2. 自制网关切换器实例(转)
  3. java net unicode / native2ascii / url decode / url encode / UTF8 / js url code
  4. 大数据和精准投放是广告行业的一场变革
  5. asp jsp cgi php之间的区别和优点
  6. SQL获取当前年第一天日期 MYSQL获取当前年第一天
  7. Github的wiki编写
  8. mysql医学数据库_现代医学模式的特点是(  )
  9. 农产品信息智能推荐平台(11)
  10. alternate端口什么意思_alternate是什么意思