fm.cpp
#include <iostream>
#include <stdio.h>
using namespace std;
bool coversRegion(int startR,int startC,int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
for(int i = 0;i<Tr;i++){
if(startR+i<0)continue;
if(startR+i>=Ar)break;
for(int j=0;j<Tc;j++){
if(startC+j<0)continue;
if(startC+j>=Ac)break;
if(grid[startR+i][startC+j]=='X') return true;
}
}
return false;
}
int countTiles(int startR,int startC,int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
int count = 0;
for(int i=startR;i<Ar;i+=Tr){
for(int j=startC;j<Ac;j+=Tc){
if(coversRegion(i,j,Ar,Ac,Tr,Tc,grid))count++;
}
}
return count;
}
int countMinimum(int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
int minTiles = 1000000;
for(int i = 1-Tr;i <= 0;i++){
for(int j=1-Tc;j<=0;j++){
int temp = countTiles(i,j,Ar,Ac,Tr,Tc,grid);
if(temp < minTiles) minTiles = temp;
}
}
return minTiles;
}
int main(){
int Ar,Ac,Tr,Tc;
char grid[1000][1000];
while(cin >> Ar >> Ac >> Tr >> Tc){
for(int i=0;i<Ar;i++){
char a;
scanf("%c",&a);
for(int j=0;j<Ac;j++){
scanf("%c",&grid[i][j]);
}
}
cout << countMinimum(Ar,Ac,Tr,Tc,grid) << endl;
}
return 0;
}