Uva 1595对称轴
题目描述:
给出平面上N个点,问是否可以找到一条竖线,使得所有点左右对称。
思路:
这个题我的思路是将所有高度(y)相同的点求每组高度的坐标x的平均值,如果总个数N是偶数,那么只要每组高度的x平均值相同,就能找到一个对称轴,而N是奇数,则需要平均值相同的基础上找出所有点的坐标x的中位数,如果中位数和平均值相同,那么也可以。
做的时候想的条件有些复杂,多加了一些没用的判断。这里提供两组测试数据,供参考。
2
4
-1 0
1 0
0 0
0 -1
5
0 -1
0 10000
0 -10000
0 2
0 5
代码:
#include
#include
PS:
此外我还在网上看到两种方法,要比我上面的这个简单不少。
一是先找到x最大和最小的两个点,取他们的中点作为对称轴,因为如果整个图形对称,那么对称轴一定在最外面的两个点的中点上。然后对每个点遍历,看是否存在与之对称的点。
参看链接:https://blog.csdn.net/GuoZLH/article/details/53141335
二是直接对所有点按x大小分别升序和降序地排列一次,然后顺序地看point1[i].x + point2[i].x
是否是中轴的二倍,然后再看y是否相同即可。中轴和方法一的做法一致。这个方法应该是最巧妙的。
参看链接:https://blog.csdn.net/Amateur_DP/article/details/81255412