由于 \(m \le 2 \times 10^{5}\),所以可以把有黑格子的行扔到一个 map 里面,然后再用一个 set 存储当前能走到哪些格子。按照题意暴力转移,开两个 vector in 和 out,分别存储哪些格子要删掉,哪些格子要加入。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
map<int,vector<int>> Map;
set<int> Set;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Map[x].push_back(y);
}
Set.insert(n);
for(auto i:Map)
{
vector<int> in,out;
for(int j:i.second)
{
if(Set.count(j)) out.push_back(j);
if(Set.count(j-1)||Set.count(j+1)) in.push_back(j);
}
for(int j:out) Set.erase(j);
for(int j:in) Set.insert(j);
}
printf("%d",Set.size());
return 0;
}
标签:count,ABC203E,Set,格子,int,题解,White,out
From: https://www.cnblogs.com/sapo1o/p/18653270