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

  

你可能感兴趣的:(UVA 1595 multimap 的应用)