您的位置:首页 > 其它

hdu 4022 STL

2015-03-06 16:52 375 查看
题意:给你n个敌人的坐标,再给你m个炸弹和爆炸方向,每个炸弹可以炸横排或竖排的敌人,问你每个炸弹能炸死多少个人。

/*
HDU 4022
G++ 1296ms

*/

#include<stdio.h>
#include<iostream>
#include<set>
#include<map>
#include<algorithm>
using namespace std;

// 建立一个 map,从 int 到 一个 multiset 容器的映射
typedef map<int,multiset<int> > line;// 两个>间一定要加个空格
map<int,multiset<int> >mx;//定义x坐标对应的map
map<int,multiset<int> >my;//定义y坐标对应的map

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);//multiset 去除一个元素
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: