感觉写的有点冗余,肯定不是最优解。
#include <bits/stdc++.h>
using namespace std;
int n, L, S;
int Tmap[55][55] = {0};
vector<pair<int, int>> land;
bool check(int x, int y) {
if (x > (L - S) || y > (L - S))
return false;
for (int i = 0; i <= S; i++) {
for (int j = 0; j <= S; j++) {
pair<int, int> p(x + i, y + j);
//cout << "Tmap[" << i << "][" << j << "]:" << Tmap[i][j] << endl;
if (Tmap[i][j] && find(land.begin(), land.end(), p) != land.end()) { //绿化中有,藏宝图上有
continue;
} else if (!Tmap[i][j]
&& find(land.begin(), land.end(), p) == land.end()) { //绿化没有,藏宝图上没有
continue;
} else {
return false;
}
}
}
return true;
}
int main() {
int x, y, cnt = 0;
cin >> n >> L >> S;
for (int i = 0; i < n; i++) {
cin >> x >> y;
pair<int, int> p(x, y);
land.push_back(p);
}
for (int i = S; i >= 0; i--) {
for (int j = 0; j <= S; j++) {
cin >> Tmap[i][j];
}
}
for (int i = 0; i < n; i++) {
if (check(land[i].first, land[i].second))
cnt++;
}
cout << cnt;
return 0;
}