hdu4022-bomb stl
stl应用:
list map
新学:remove(value):找到容器中所有等于value的元素并删除之
#include <iostream> #include <map> #include <cstdio> #include <list> using namespace std; int main() { int n,m; map<int ,list<int> x; map<int ,list<int> > y; while(~scanf("%d%d",&n,&m) && (m!=0 || n!=0)){ x.clear(),y.clear(); int a,b; for(int i=0;i<n;i++){//十字链表 scanf("%d%d",&a,&b); x[a].push_front(b); y[b].push_front(a); } for(int i=0;i<m;i++){ int base,dir; scanf("%d%d",&dir,&base); int num; if(dir==0){ num=x[base].size(); printf("%d\n",num); list<int>::iterator it; for(it=x[base].begin();it!=x[base].end();it++) { y[*it].remove(base);//找到链中等于base的元素并且删除。 } x[base].clear();//bomb!!!! } else{ num=y[base].size(); printf("%d\n",num); list<int>::iterator it; for(it=y[base].begin();it!=y[base].end();it++) { x[*it].remove(base); } y[base].clear(); } } printf("\n"); } return 0; }