题意:给你n个敌人的坐标,再给你m个炸弹和爆炸方向,每个炸弹可以炸横排或竖排的敌人,问你每个炸弹能炸死多少个人。
当时是想到用vector,因为敌人不是很多,也就100000,不过有人过了就没写了,回来看到别人用map+set过的,就学习一下这两个东西,特别是set所有操作都是logn,很快啊,还有就是iteator的用法,好像和指针差不多,还没看完c++,回去再翻翻书吧。效率蛮高的。
Run ID | Submit Time | Judge Status | Pro.ID | Exe.Time | Exe.Memory | Code Len. | Language | Author |
4585178 | 2011-09-11 23:23:59 | Accepted | 4022 | 1281MS | 12424K | 755 B | G++ | xym2010 |
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<cmath>
#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++)
{
scanf("%d%d",&x,&y);
h[x].insert(y);
l[y].insert(x);
}
for(int j=0;j<m;j++)
{
scanf("%d%d",&x,&y);
if(x==0)
pop(h,l,y);
else
pop(l,h,y);
}
printf("\n");
}
return 0;
}