题目:
平面上有n个点,是否存在一条竖直的轴是所有点的对称轴。
输入:
点坐标。
输出:
存在输出YES,否则输出NO。
若存在对称轴,则对称轴横坐标为x = (x1 + x2 + ... + xn)/n。为了防止出现浮点数,可以将xn*2。
sum = x1 + x2 + ... + xn,则利用n*xn与sum*2-n*xn可以区别每一个点及其对称点。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int mid;
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
long sum = 0;
vector<int> x,y;
for( int i = 0; i < n; i++)
{
int a,b;
cin >> a >> b;
x.push_back(a*2);
y.push_back(b);
sum += a*2;
}
mid = sum/n;
int k = 0;
for( int i = 0; i < n; i++ )
{
k = 0;
for ( int j = 0; j < n; j++)
{
if( (y[i] == y[j] && (x[i] + x[j] == mid*2) ) || x[i] == mid))
k = 1;
}
if(!k) break;
}
if(k) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}