题目描述:给出平面上N(N<=1000)个点。问是否可以找到一条竖线,使得所有点左右对称,如图所示:
#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; }
原文地址:http://blog.csdn.net/majing19921103/article/details/43275901