#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct Tree{
int x;
int y;
};
int n,L,S;
int treasure[60][60];
vector<Tree> trees;
bool check(int x,int y){
for(int i = 0;i < S+1;i++){
for(int j = 0;j < S+1;j++){
int cx = i;
int cy = j;//(cx,cy是藏宝图的左下角)
if(x+cx<0 || x+cx>L || y+cy<0 || y+cy>L){
return false;//超出了绿化图的边界 退出
}
bool flag = false;
for(int t = 0;t < n;t++){
if(x+cx==trees[t].x && y+cy==trees[t].y){
flag = true;//也就是说藏宝图上这个位置也出现在绿化图上 即在绿化图上这个位置是有树的
break;
}
}
if(treasure[i][j]&&flag== false ||treasure[i][j]== false&&flag){
return false;
}
}
}
return true;
}
int main(){
scanf("%d%d%d",&n,&L,&S);
for(int i = 0;i < n;i++){
Tree t;
scanf("%d%d",&t.x,&t.y);
trees.push_back(t);
}
for(int i = S;i >= 0;i--){//因为题目规定倒着输出
for(int j = 0;j <= S;j++){
scanf("%d",&treasure[i][j]);
}
}
int res = 0;
for(int i = 0;i < n;i++){
if(check(trees[i].x,trees[i].y)){
res++;
}
}
printf("%d",res);
}
202206-2 寻宝!大冒险!
最新推荐文章于 2024-07-25 14:10:57 发布