fm.cpp
#include <cstdio>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <limits.h>
#include <map>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <bitset>
#include <string>
using namespace std;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef set<int> si;
typedef set<ii> sii;
#define MP make_pair
#define PB push_back
#define REP(i,a) for ( int i = 0; i < int(a); i++)
#define FOR(i,a,b) for ( int i = int(a); i<=int(b); i++)
#define FORD(i,a,b) for(int i= int(a); i>=int(b); i--)
const int INF = 1<<29;
typedef long long int ll;
int ar, ac, tr, tc;
char board[1001][1001];
bool isIn( int r1, int r2, int c1, int c2 )
{
r1 = max( r1, 0 );
r2 = min( r2, ar - 1 );
c1 = max( c1, 0 );
c2 = min( c2, ac - 1 );
//printf("%d %d %d %d\n", r1, r2, c1, c2);
FOR( i, r1, r2 )
FOR( j, c1, c2 )
if ( board[i][j] == 'X' )
return true;
return false;
}
int countTiles( int r, int c )
{
int count = 0;
for ( int i = r; i < ar; i += tr )
for ( int j = c; j < ac; j += tc )
if ( isIn( i, i+tr-1, j, j+tc-1 ) ) {
++count;
//printf("YEP\n");
}
return count;
}
int main()
{
while ( scanf("%d%d%d%d", &ar, &ac, &tr, &tc) == 4 )
{
FOR( i, 0, ar-1 )
{
FOR( j, 0, ac-1 )
scanf(" %c", &board[i][j]);
//scanf("%*c");
}
int count = INT_MAX;
FOR( i, -tr+1, 0 )
FOR( j, -tc+1, 0 )
{
int tmp = countTiles( i, j );
count = min( count, tmp );
//printf("%d-%d\n", tmp, count);
}
printf("%d\n", count);
// break;
}
return 0;
}