import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//获取树木数量
int l = sc.nextInt();//绿化图的长宽
int s = sc.nextInt();//藏宝图的长宽
int [][]tree=new int[n][2];//设定储存树木位置的数组
int [][]box_map=new int[s+1][s+1];//设定储存宝藏图信息的数组
for(int i=0;i<n;i++){//获取树木的纵横坐标
tree[i][0]=sc.nextInt();
tree[i][1]=sc.nextInt();
}
for(int i=s;i>=0;i--){//获取藏宝图的信息
for(int j=0;j<=s;j++){
box_map[i][j]= sc.nextInt();
}
}
int ans=0;//储存符合条件的位置数量
for(int i=0;i<n;i++){
if(l-tree[i][0]<s||l-tree[i][1]<s){//判断是否越界,绿化图长宽-树木的纵横是否小于s,任意一方小于藏宝图尺寸则判为无效,直接跳跃到下一个大循环
continue;
}
int [][]temp=new int [s+1][s+1];//设定临时存储数组
for(int j=0;j<=s;j++){//将数组填充为零矩阵
for(int k=0;k<=s;k++){
temp[j][k]=0;
}
}
for(int j=0;j<n;j++){
if(tree[j][0] - tree[i][0] < 0 || tree[j][1] - tree[i][1] < 0 || tree[j][0] - tree[i][0] > s || tree[j][1] - tree[i][1] > s){
continue;//判断是否越界,与0作比较是确保小循环j获取到的位置处于大循环i获取到的位置之后,可构成对应的区域来满足藏宝图的要求;与s作比较则如前一段判断中类同
}
temp[ tree[j][0] - tree[i][0] ][ tree[j][1] - tree[i][1] ]=1;//确定满足条件,将获取到的位置映射到零矩阵temp中,并将其赋值为1,即有树木在这里
}
int flag=0;//判断是否失败
for(int j=0;j<=s;j++){
for(int k=0;k<=s;k++){
if(temp[j][k]!=box_map[j][k]){//循环判断临时储存数组temp是否与藏宝图所标注的位置信息一致
flag=1;//不一致赋值为1,即失败
break;
}
}
if(flag==1){
break;
}
}
if(flag==0){//通过位置信息判断,则对应符合条件的区域数量+1
ans++;
}
}
System.out.println(ans);
}
}
22-6-2寻宝!大冒险!(csp)(Java)(100分)
于 2023-08-21 20:59:59 首次发布