2011年上海網絡賽·STL·HDU 4022 Bombing

題目大意:

給定一張圖中的基地座標,再給定m個炸彈:

'0'  x: 炸掉座標爲x的基地

'1' y :炸掉座標爲y的基地

解題思路:

map存儲基地,開兩個分別存對應x和y的基地;查詢直接輸出size,不要忘記刪掉炸過的基地

AC代碼:

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <bitset>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <fstream>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;
#define   maxn          1010
#define lson l , m , rt << 1

#define rson m + 1 , r , rt << 1 | 1
#define   ms(x,y)      memset(x,y,sizeof(x))
#define   rep(i,n)      for(int i=0;i<(n);i++)
#define   repf(i,a,b)   for(int i=(a);i<=(b);i++)
#define   PI           pair<int,int>
//#define   mp            make_pair
#define   FI            first
#define   SE            second
#define   IT            iterator
#define   PB            push_back
#define   Times         10
typedef   long long     ll;
typedef   unsigned long long ull;
typedef   long double   ld;
typedef   pair<int ,int > P;
//#define N 100
const double eps = 1e-10;
const double  pi = acos(-1.0);
const  ll    mod = 1e9+7;
const  int   inf = 0x3f3f3f3f;
const  ll    INF = (ll)1e18+300;
const int   maxd = 110000 + 10;


map<int, multiset<int > > mp_x, mp_y;
void judge1(int p) {
    multiset<int >::iterator it;
    for (it = mp_x[p].begin(); it != mp_x[p].end(); it ++) {
        mp_y[*it].erase(p);
    }
    mp_x[p].clear();
    return ;
}

void judge2(int p) {
    multiset<int >::iterator it;
    for (it = mp_y[p].begin(); it != mp_y[p].end(); it ++) {
        mp_x[*it].erase(p);
    }
    mp_y[p].clear();
    return ;
}
int main() {
    int n, m;
    while(~scanf("%d%d", &n, &m) && (m + n)) {
        mp_x.clear();
        mp_y.clear();
        for (int i = 0; i < n; i ++) {
            int x, y;
            scanf("%d%d", &x, &y);
            mp_x[x].insert(y);
            mp_y[y].insert(x);
        }
        for (int i = 0; i < m; i++) {
            int a, b;
            scanf("%d%d", &a, &b);
            if(a == 0) {
                cout << mp_x[b].size() << endl;
                judge1(b);
            }
            else if(a == 1) {
               cout << mp_y[b].size() << endl;
               judge2(b);
            }
        }
        cout << endl;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章