边界处理的时候千万注意,藏宝图超出全图范围也要排除在外,一开始没考虑这个只拿了80分。。
#include<bits/stdc++.h>
using namespace std;
long long treasure_map[55][55];
long long treein_map[1005][2];
long long tree[1005][2];
long long n,l,s;
int k=0;
int num=0;
int main(){
cin>>n>>l>>s;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
tree[i][0]=x;
tree[i][1]=y;
}
bool check(int x,int y);
for(int i=s;i>=0;i--){
for(int j=0;j<=s;j++){
cin>>treasure_map[i][j];
if(treasure_map[i][j]==1){
num++;
treein_map[k][0]=i;
treein_map[k][1]=j;
k++;
}
}
}
int flag=0;
for(int i=0;i<n;i++){
if(check(tree[i][0],tree[i][1])){
flag++;
}
}
cout<<flag;
}
bool check(int x,int y){
int flag=0;
if(x+s>l||y+s>l){
return false;
}
for(int i=0;i<k;i++){
for(int j=0;j<n;j++){
// cout<<treein_map[i][0]+x<<treein_map[i][1]+y<<tree[j][0]<<tree[j][1]<<endl;
if(treein_map[i][0]+x==tree[j][0]&&treein_map[i][1]+y==tree[j][1]){
// cout<<treein_map[i][0]+x<<treein_map[i][1]+y<<endl;
flag+=1;
}
}
}
int flag1=0;
for(int j=0;j<n;j++){
if(tree[j][0]<=x+s&&tree[j][1]<=y+s&&tree[j][0]>=x&&tree[j][1]>=y){
flag1++;
}
}
// cout<<flag<<flag1<<num<<endl;
if(flag==num&&num==flag1){
return true;
}
return false;
}