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