解题思路
枚举,判断个数
AC代码
#include <iostream>
#include <algorithm>
#define x first
#define y second
#define INF 0x3f3f3f3f
using namespace std;
const int N=1e3+10;
const int M=60;
typedef pair<int, int> PII;
PII Trees[N];
int B[M][M];
int n,L,S;
int main()
{
cin>>n>>L>>S;
for(int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
Trees[i]={x,y};
}
int sum=0;
for(int i=S;i>=0;i--)
for(int j=0;j<=S;j++)
{
cin>>B[i][j];
if(B[i][j])
{
sum++;
}
}
int res=0;
for(int i=0;i<n;i++)
{
int cnt=0;
int sx=Trees[i].x;
int sy=Trees[i].y;
//判断是否会越界
if(sx+S>L||sy+S>L)
{
continue;
}
for(int i=0;i<n;i++)
{
int mx=Trees[i].x;
int my=Trees[i].y;
//判断是否在范围内
if(mx>=sx&&my>=sy&&my-sy<=S&&mx-sx<=S)
{
//判断图的相应位置是不是有树,并且要考虑多树的情况不匹配
if(!B[mx-sx][my-sy]) cnt=-INF;
cnt++;
}
}
if(cnt==sum)
{
res++;
}
}
cout<<res;
}