UVA 1595 multimap 的应用
这道题目的大意是给出一系列的点,问:是否能找到一个对称轴,使得所有点左右对称。
这是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;
}

浙公网安备 33010602011771号