这题有一个特别简单的方法——一边输入边判断。
(我考试的时候怎么没想出来)
先写个map数组:
map<int,map<int,int> >a;
再for循环输入:
for(int i=1;i<=m;i++){
cin>>x>>y;
a[x][y]++;
}
如果上面有房子,cnt++
下面有房子,cnt++
以此类推
AC CODE:
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long cnt=0;
map<int,map<int,int> >a;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
a[x][y]++;
if(a[x-1][y]) cnt++;
if(a[x][y-1]) cnt++;
if(a[x+1][y]) cnt++;
if(a[x][y+1]) cnt++;
//上下左右有房子,cnt++
}
cout<<cnt;
return 0;
}