139 lines
3.0 KiB
Java
139 lines
3.0 KiB
Java
package chelper;
|
|
|
|
import io.InputReader;
|
|
import io.OutputWriter;
|
|
|
|
public class SnarkB {
|
|
|
|
int[][] directions = {
|
|
{0, 1},
|
|
{0, -1},
|
|
{1, 0},
|
|
{-1, 0}
|
|
};
|
|
|
|
public void solve(int testNumber, InputReader in, OutputWriter out) {
|
|
int n = in.nextInt();
|
|
int m = in.nextInt();
|
|
int N = in.nextInt();
|
|
int M = in.nextInt();
|
|
|
|
int[][] a = new int[n][m];
|
|
for (int i = 0; i < n; i++) {
|
|
String s = in.nextString();
|
|
for (int j = 0; j < m; j++) {
|
|
if (s.charAt(j) == 'O') {
|
|
a[i][j] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
int mini = n;
|
|
int minj = n;
|
|
int maxi = 0;
|
|
int maxj = 0;
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
for (int j = 0; j < m; j++) {
|
|
if (a[i][j] != 1) {
|
|
continue;
|
|
}
|
|
|
|
mini = Math.min(mini, i);
|
|
minj = Math.min(minj, j);
|
|
maxi = Math.max(maxi, i);
|
|
maxj = Math.max(maxj, j);
|
|
}
|
|
}
|
|
|
|
int n2 = maxi - mini + 1;
|
|
int m2 = maxj - minj + 1;
|
|
|
|
int[][] a2 = new int[n2][m2];
|
|
|
|
for (int i = 0; i < n2; i++) {
|
|
for (int j = 0; j < m2; j++) {
|
|
a2[i][j] = a[i + mini][j + minj];
|
|
}
|
|
}
|
|
|
|
int[][] A = new int[N][M];
|
|
|
|
for (int i = 0; i < N; i++) {
|
|
String s = in.nextString();
|
|
for (int j = 0; j < M; j++) {
|
|
if (s.charAt(j) == 'O') {
|
|
A[i][j] = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
int ans = 0;
|
|
|
|
for (int i = 0; i < N; i++) {
|
|
for (int j = 0; j < M; j++) {
|
|
boolean bounds = true;
|
|
for (int factor = 1; factor < 1000 && bounds; factor++) {
|
|
boolean ok = true;
|
|
|
|
for (int ii = 0; ii < n2 * factor && ok && bounds; ii++) {
|
|
for (int jj = 0; jj < m2 * factor && ok && bounds; jj++) {
|
|
if (ii + i >= N || jj + j >= M) {
|
|
bounds = false;
|
|
ok = false;
|
|
break;
|
|
}
|
|
|
|
int io = ii / factor;
|
|
int jo = jj / factor;
|
|
|
|
if (a2[io][jo] != 1) {
|
|
continue;
|
|
}
|
|
|
|
if (A[ii + i][jj + j] != 1) {
|
|
ok = false;
|
|
break;
|
|
}
|
|
|
|
|
|
for (int[] direction : directions) {
|
|
int ii2 = ii + direction[0];
|
|
int jj2 = jj + direction[1];
|
|
|
|
int val1 = -1;
|
|
int val2 = -1;
|
|
|
|
if (ii2 + i < 0 || jj2 + j < 0 || ii2 + i >= N || jj2 + j >= M) {
|
|
val2 = 0;
|
|
} else {
|
|
val2 = A[ii2 + i][jj2 + j];
|
|
}
|
|
|
|
int io2 = ii2 / factor;
|
|
int jo2 = jj2 / factor;
|
|
|
|
if (io2 < 0 || jo2 < 0 || io2 >= n2 || jo2 >= m2 || ii2 < 0 || jj2 < 0) {
|
|
val1 = 0;
|
|
} else {
|
|
val1 = a2[io2][jo2];
|
|
}
|
|
|
|
if (val1 != val2) {
|
|
ok = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ok) {
|
|
ans++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
out.println(ans);
|
|
}
|
|
}
|