5-6 UVA 1595 Symmetry对称轴
来源:互联网 发布:步鑫生失败原因 知乎 编辑:程序博客网 时间:2024/04/30 01:53
题目大意紫书和原文都讲的非常易懂清晰,
观察给出的数据范围:不超过1000个点,每个点坐标范围在-10000到10000之间!
直接暴力求解就可以了!
整体思路:
因为一撮点要轴对称的话,肯定有一个确定的对称轴,所以可以先找两个点,来确定对称轴,在一个一个扫描所有的点,看看是不是对称!
为了方便,可以直接找最左上和最右上的两个点,来确定对称轴!
有一个技巧:因为对称轴是要除以二的,不妨存点的时候,直接存坐标的二倍,以保证整数!
#include<cstdio>using namespace std;const int maxn = 1000 + 5;struct point{ int x,y;}A[maxn];int judge(int num,int N,int line){ for (int i = 0; i < N; ++i)if(A[num].x + A[i].x == 2 * line && A[num].y == A[i].y)return 1; return 0;}int main(){ int T,N,x,y,line,flag = 0,left = 0,right = 0; scanf("%d",&T); while(T--){ scanf("%d",&N); flag = left = right = 0; for (int i = 0; i < N; ++i){ scanf("%d%d",&x,&y); A[i] = (point){2 * x,2 * y}; } for (int i = 0 ; i < N; ++i){ if (A[i].x < A[left].x)left = i; else if (A[i].x == A[left].x && A[i].y > A[left].y)left = i; if (A[i].x > A[right].x)right = i; else if (A[i].x == A[right].x && A[i].y > A[right].y)right = i; } line = (A[left].x + A[right].x ) / 2; for (int i = 0; i < N; ++i)if (!judge(i,N,line)){flag = 1;break;} flag == 0 ? (printf("YES\n")) : (printf("NO\n")); } return 0;}
0 0
- 5-6 UVA 1595 Symmetry对称轴
- UVA 1595 Symmetry(对称轴)
- Symmetry(对称轴)UVA 1595
- 习题5-6 对称轴(Symmetry, UVa1595)
- 对称轴(Symmetry)
- UVa 1595-对称轴
- 算法竞赛入门经典 第二版 习题5-6 对称轴 Symmetry uva1595
- 算法竞赛入门经典(第2版)习题5-6 对称轴(Symmetry) Uva1595
- UVa 1595 Symmetry
- UVA - 1595 Symmetry
- UVa 1595 - Symmetry
- UVa 1595 Symmetry(暴力)
- UVa: 1595 - Symmetry
- Uva 1595 Symmetry
- UVa: 1595 - Symmetry
- UVA - 1595 Symmetry
- UVa 1595 Symmetry
- UVA - 1595 Symmetry set
- C#使用参数数组
- C++内联(inline)
- 三种按钮,普通,带背景,背景切换
- Velocity新手入门
- Android酷炫实用的开源框架(UI框架)
- 5-6 UVA 1595 Symmetry对称轴
- iOS一次性移除所有子视图
- 恭贺华清荣获“2015年中国信息产业年度最具影响力教育机构奖”
- DataTable类
- linux编译出错心得
- 关于Spring JPA的一点小总结
- 数据库隔离性
- OC学习 习题
- 登陆框,虚线框按钮作为背景