题意:给你n个敌人的坐标,再给你m个炸弹和爆炸方向,每个炸弹可以炸横排或竖排的敌人,问你每个炸弹能炸死多少个人。
1 /* 2 HDU 4022 3 G++ 1296ms 4 5 6 */ 7 8 9 #include<stdio.h> 10 #include<iostream> 11 #include<set> 12 #include<map> 13 #include<algorithm> 14 using namespace std; 15 16 // 建立一个 map,从 int 到 一个 multiset 容器的映射 17 typedef map<int,multiset<int> > line;// 两个>间一定要加个空格 18 map<int,multiset<int> >mx;//定义x坐标对应的map 19 map<int,multiset<int> >my;//定义y坐标对应的map 20 21 int bomb(line &x,line &y,int pos) 22 { 23 int ret=x[pos].size(); 24 multiset<int>::iterator it;//这个学习下 25 for(it=x[pos].begin();it!=x[pos].end();it++) 26 y[*it].erase(pos);//multiset 去除一个元素 27 x[pos].clear();//清空multiset 28 return ret; 29 } 30 int main() 31 { 32 int n,m; 33 int c,d; 34 int tx,ty; 35 while(scanf("%d%d",&n,&m)!=EOF) 36 { 37 if(n==0&&m==0)break; 38 mx.clear(); 39 my.clear(); 40 for(int i=0;i<n;i++) 41 { 42 scanf("%d%d",&tx,&ty); 43 mx[tx].insert(ty); 44 my[ty].insert(tx); 45 } 46 for(int i=0;i<m;i++) 47 { 48 scanf("%d%d",&c,&d); 49 int ans; 50 if(c==0) ans=bomb(mx,my,d); 51 else ans=bomb(my,mx,d); 52 printf("%d ",ans); 53 } 54 printf(" "); 55 } 56 return 0; 57 }