显示原始代码
#include <bits/stdc++.h>
using namespace std;
#define ulli unsigned long long int
#define F(i, n, m) for (int i = n; i <= m; i++)
inline int read() {
bool w = 0;
int s = 0;
char ch = 0;
while (!isdigit(ch)) w = ch == '-', ch = getchar();
while (isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
return w ? -s : s;
}
inline void write(int x) {
if (x < 0)
putchar('-'), x = ~x + 1;
if (x > 9)
write(x / 10);
putchar((x % 10) | 48);
}
int main() {
freopen("1.in", "r", stdin);
int T = read(), n1, m1, n2, m2, cn, cm, ans, sj, sk;
char c;
bool s[50][50], h[50][50];
for (int i = 1; i <= T; i++) {
ans = 0;
n1 = read();
m1 = read();
for (int j = 0; j < n1; j++) {
for (int k = 0; k < m1; k++) {
cin >> c;
while (c != '#' && c != '.') cin >> c;
if (c == '#')
s[j][k] = 1;
else
s[j][k] = 0;
}
}
n2 = read();
m2 = read();
cn = n2 / 2;
cm = m2 / 2;
for (int j = 0; j < n2; j++) {
for (int k = 0; k < m2; k++) {
cin >> c;
while (c != '#' && c != '.') cin >> c;
if (c == '#')
h[j][k] = 1;
else
s[j][k] = 0;
}
}
for (int j = 0; j < n1; j++) {
for (int k = 0; k < m1; k++) {
for (int j2 = 0; j2 < n2; j2++) {
sj = j - cn + j2;
if (sj < 0 || sj >= n1)
continue;
for (int k2 = 0; k2 < m2; k2++) {
sk = k - cm + k2;
if (sk < 0 || sk >= m1)
continue;
if (s[sj][sk] == 1 && h[j2][k2] == 1) {
goto noch;
}
}
}
ans++;
noch:;
}
}
write(ans);
printf("\n");
}
return 0;
}