您的位置:首页 > 其它

UVA 1595 multimap 的应用

2016-01-28 14:46 190 查看
这道题目的大意是给出一系列的点,问:是否能找到一个对称轴,使得所有点左右对称。

这是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;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: