HDU 4022 Bombing

来源:互联网 发布:冰粥机淘宝 编辑:程序博客网 时间:2024/05/13 23:28

题目大意,给如N个点(x,y),再给出M个炸弹,每次可以炸横的一整排或者竖直方向一整排,

输出每个炸弹炸毁多少个点

网上发现一段超精湛的STL做法.学习一下

用map,将横竖坐标分别映射到一个multiset,然后做相应的维护即可

每次输出即是输出整个set的大小

#include<cstdio>#include<cstring>#include<string>#include<iostream>#include<algorithm>#include<map>#include<set>#include<iterator>using namespace std;typedef map<int,multiset<int> > def;void pop(def &a,def &b,int k){    printf("%d\n",a[k].size());    for(multiset<int>::iterator i=a[k].begin();i!=a[k].end();i++)        b[*i].erase(k);    a[k].clear();}int main(){    int n,m,x,y;    while(1)    {        scanf("%d%d",&n,&m);        if(n==0&&m==0)return 0;        def h;def l;        for(int i=0;i<n;i++)        {            scand("%d%d",&x,&y);            h[x].insert(y);            l[y].insert(x);        }        for(int j=0;j<m;j++)        {            scan_d(x);            scan_d(y);            if(x==0)                pop(h,l,y);            else                pop(l,h,y);        }        printf("\n");    }    return 0;}


原创粉丝点击