UVa: 1595 - Symmetry
时间:2015-01-30 09:13:38
收藏:0
阅读:148
题目描述:给出平面上N(N<=1000)个点。问是否可以找到一条竖线,使得所有点左右对称,如图所示:
则左边的图形有对称轴,右边没有。
思路:如点集存在对称轴,则对称轴为点集x坐标和的平均。然后用set存储每个点(输入点不同),遍历每一个点,通过求得的对称轴,计算它的对称点,若不存在则输出“NO”。
代码如下:
#include <iostream> #include <string> #include <vector> #include <set> #include <map> #include <sstream> #include <fstream> using namespace std; #define FILE typedef pair<int,int> point; int main(int argc, char* argv[]) { #ifdef FILE ifstream in("data.txt"); ofstream out("output.txt"); cin.rdbuf(in.rdbuf()); cout.rdbuf(out.rdbuf()); #endif int T; cin>>T; for(int i=0;i<T;i++) { int n; set<point> data; cin>>n; int sum = 0; for(int j=0;j<n;j++) { int x,y; cin>>x>>y; sum+=x; data.insert(point(x*n,y)); } bool flag = true; for(set<point>::iterator i=data.begin();i!=data.end();i++) { point p = *i; if(data.find(point(2*sum-p.first,p.second))==data.end()) { flag = false; break; } } if(flag==true) { cout<<"YES"<<endl; } else { cout<<"NO"<<endl; } } return 0; }
评论(0)