题解 P6559 【[SBCOI2020]小镇】
STL做法
用一个pair储存二维坐标,再用map映射一个bool值。
对每一个坐标,判断上下左右四格有没有值为1的,如果有ans++。
因为同一盏灯会被两边各算一次,最后将ans/2即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m;
int opx[]={0,0,-1,1,0},opy[]={0,1,0,0,-1};
pair<int,int> pos[N],tmp;
map<pair<int,int>,bool>mp;
int ans;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>pos[i].first>>pos[i].second;
mp[pos[i]]=1;
}
for(int i=1;i<=m;i++)
for(int j=1;j<=4;j++){
tmp.first=pos[i].first+opx[j];
tmp.second=pos[i].second+opy[j];
ans+=mp[tmp];
}
cout<<ans/2;
return 0;
}