【map】【multiset】hdu 4022

来源:互联网 发布:苹果mac快捷键大全 编辑:程序博客网 时间:2024/04/28 00:39

1. 可能有重复点(这一点题目并没有说明),因此 set 行不通

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

/* * hdu 4022 * http://acm.hdu.edu.cn/showproblem.php?pid=4022 * 1500MS12376K * 【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;}


0 0