您的位置:首页 > 其它

【map】【multiset】hdu 4022

2014-04-18 12:34 302 查看
1. 可能有重复点(这一点题目并没有说明),因此 set 行不通

2. 用 C++ 的 cin, cout 超时

/*
* hdu 4022
* http://acm.hdu.edu.cn/showproblem.php?pid=4022 * 1500MS 12376K
* 【map】【multiset】
* 1. 可能有重复点(这一点题目并没有说明),因此 set 行不通
* 2. 用 C++ 的 cin, cout 超时
*/
#include <cstdio>
#include <map>
#include <set>
using namespace std;

typedef map<int, multiset<int> > BaseMap;

void BombLine(BaseMap &oBMTarget, int iLine, BaseMap &oBM2)
{
for (multiset<int>::iterator it = oBMTarget[iLine].begin();
it != oBMTarget[iLine].end(); ++it )
{
oBM2[*it].erase(iLine);
}
oBMTarget[iLine].clear();
}

int main()
{
int iBaseNum, iBomberNum, x, y, c, d;
while (1)
{
scanf("%d%d", &iBaseNum, &iBomberNum);
if ( (0 == iBaseNum) && (0 == iBomberNum) )
{
break;
}

BaseMap oBMh, oBMv;

while (iBaseNum--)
{
scanf("%d%d", &x, &y);
oBMh[x].insert(y);
oBMv[y].insert(x);
}

while (iBomberNum--)
{
scanf("%d%d", &c, &d);
if (0 == c)
{
printf("%d\n", oBMh[d].size());
BombLine(oBMh, d, oBMv);
}
else
{
printf("%d\n", oBMv[d].size());
BombLine(oBMv, d, oBMh);
}
}
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: