NC235267 星球大战

题目

  • 原题地址:星球大战
  • 题目编号:NC235267
  • 题目类型:map、list
  • 时间限制:C/C++ 2秒,其他语言4秒
  • 空间限制:C/C++ 262144K,其他语言524288K

1.题目大意

  • 二维平面上n个坐标对应着敌人,m次操作,每次操作消除指定的一行或一列的敌人,问每次操作消灭的敌人的个数

2.题目分析

  • 使用map存储每个出现的x坐标对应的所有y坐标,以及每个出现的y坐标对应的所有x坐标
  • 消灭的敌个数就是list的大小,例如消灭x=d直线上的所有敌人,消灭的敌人数就是x对应的存储y坐标的list的大小
  • 随后遍历该x对应的所有ylist,从中移除该x,最后再将该xlist清空

3.题目代码

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    map<int, list<int>> xx, yy;
    int x, y;
    for(int i=0;i<n;i++) {
        cin >> x >> y;
        xx[x].push_back(y);
        yy[y].push_back(x);
    }
    int c, d;
    while(m--) {
        cin >> c >> d;
        if(!c) {
            cout << xx[d].size() << endl;
            for(auto k: xx[d]) yy[k].remove(d);
            xx[d].clear();
        } else {
            cout << yy[d].size() << endl;
            for(auto k: yy[d]) xx[k].remove(d);
            yy[d].clear();
        }
    }
}
posted @ 2022-08-30 12:59  仪战群儒  阅读(84)  评论(0)    收藏  举报