X-man

导航

hdu 4022 Bombing (强大的map一对多的映射)

题意不多解释,以我这种英语菜鸟都读得懂

好吧!我承认参考了大牛的代码!!!!!!

STL真心强大,最近刷的水题基本都是用STL!!

选用map的理由:

                     1.map自定义了一个一对多

                     2.两个这样的map容器装下 x为键,y为值,和y为键,x为值的两个容器。

                        然后当C==0就输出当键位d的容器大小,并且去掉另一个容器中出现的点。

#include<iostream>
#include<stdio.h>
#include<map>
#include<set>
using namespace std;
//建立一个map,从int到一个multiset容器的映射
typedef map<int ,multiset<int > >line;
map<int ,multiset<int > >mx;
map<int ,multiset<int> >my;
int bomb(line &x,line &y,int pos)
{
    int ret = x[pos].size();
    multiset<int>::iterator it;
    for(it=x[pos].begin();it!=x[pos].end();it++)
        y[*it].erase(pos);//删除一个元素
    x[pos].clear();//清空multiset(清除一行或列)
    return ret;
}
int main()
{
    int n,m;
    int c,d;
    int tx,ty;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        if(n==0&&m==0)break;
        mx.clear();
        my.clear();
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&tx,&ty);
            mx[tx].insert(ty);
            my[ty].insert(tx);
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d %d",&c,&d);
            int ans;
            if(c==0)ans=bomb(mx,my,d);
            else ans=bomb(my,mx,d);
            printf("%d\n",ans);
        }
        printf("\n");
    }
    return 0;
}

 

posted on 2013-04-05 20:40  雨钝风轻  阅读(232)  评论(0编辑  收藏  举报