这道题目的大意是给出一系列的点,问:是否能找到一个对称轴,使得所有点左右对称。
这是multimap的简单应用,把纵坐标看作key,相应的所有点纵坐标相等的点的横坐标看作value,然后把value的值相加,除以点的个数,得到一个值,这个值可能就是对称轴,然后计算所有的点,看是否是相同的对称轴,思路比较简单。
#include<iostream> #include<map> #include<string> #include<string.h> #include<math.h> #include<set> using namespace std; typedef multimap<int,int> M; int main(){ int t,n,a,b; cin>>t; M m; set<float> ss; while(t--){ cin>>n; m.clear(); ss.clear(); for(int i=0;i<n;i++){ cin>>a>>b; m.insert(pair<int,int>(b,a)); } int sum=0,c=0,flag=0; float d; M::iterator it; pair<M::iterator,M::iterator> ret; for(it=m.begin();it!=m.end();){ sum=0; c=0; // cout<<it->first<<"=>"; ret=m.equal_range(it->first); for(it=ret.first;it!=ret.second;it++){ sum+=(*it).second; c++; } d=sum/c; ss.insert(d); if(ss.size()>1){ cout<<"NO"<<endl; flag=-1; break; } } if(flag==0) cout<<"YES"<<endl; } return 0; }