现充|junyu33

题解 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;
}