202206-2 寻宝!大冒险!
主要用到了稀疏矩阵,没有用到差分前缀和的方法。一次通过!YES!
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, l, s;
int ans = 0;
cin >> n >> l >> s;
int a[n][2];
for(int i = 0; i < n; i++) {
cin >> a[i][0] >> a[i][1];
}
int b[s+1][s+1];
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] == 1) {
sum++;
}
}
}
for (int i = 0; i < n; i++) {
int ts = 0;
int x = a[i][0];
int y = a[i][1];
if (!(x+s <= l && y+s <= l)) continue;//不能容纳藏宝图的范围
bool flag = true;
for (int j = 0; j < n; j++) {
int p = a[j][0];
int q = a[j][1];
if (p >= x && q >= y && p-x <= s && q-y <= s) {//找到在藏宝图范围的点
//cout << "yes";
ts++;
if (b[p-x][q-y] != 1) {
//cout << "false";
flag = false;
break;
}
}
}
if (ts!=sum) flag = false;
if (flag) {
//cout << "one" << endl;
ans++;
}
}
cout << ans << endl;
}