试题编号: | 202206-2 |
试题名称: | 寻宝!大冒险! |
时间限制: | 500ms |
内存限制: | 512.0MB |
暴力(只存储绿化图数木位置)
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>P;
const long long l=1e9;
int b[51][51];
int main(){
int n,l,s,num=0;
cin>>n>>l>>s;
int ax[n]={0},c[n]={0};
for(int i=0;i<n;i++) cin>>ax[i]>>c[i];
for(int i=s;i>=0;i--){
for(int j=0;j<=s;j++){
cin>>b[i][j];
if(b[i][j]) num++;
}
}
int sum=0;
for(int i=0;i<n;i++){
int x=ax[i],y=c[i];
int ts=0,flag=1;
for(int j=0;j<n;j++){
if(ax[j]-x>=0&&ax[j]-x<=s&&c[j]-y>=0&&c[j]-y<=s) ts++;
}//计算区域内树木
if(ts==num){//区域内树木与藏宝图一致
for(int m=0;m<=s;m++){
for(int k=0;k<=s;k++){//藏宝图超边界
if(x+m>l||k+y>l){
flag=0;
break;
}
if(b[m][k]==0){
for(int a=0;a<n;a++){
if(ax[a]==m+x&&c[a]==k+y){
flag=0;
break;
}
}
}
}
}
if(flag) sum++;
}
}
cout<<sum;
return 0;
}