Source code for submission s566

fm.cpp

  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. bool coversRegion(int startR,int startC,int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
  8. for(int i = 0;i<Tr;i++){
  9. if(startR+i<0)continue;
  10. if(startR+i>=Ar)break;
  11. for(int j=0;j<Tc;j++){
  12. if(startC+j<0)continue;
  13. if(startC+j>=Ac)break;
  14. if(grid[startR+i][startC+j]=='X') return true;
  15. }
  16. }
  17. return false;
  18. }
  19.  
  20. int countTiles(int startR,int startC,int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
  21. int count = 0;
  22. for(int i=startR;i<Ar;i+=Tr){
  23. for(int j=startC;j<Ac;j+=Tc){
  24. if(coversRegion(i,j,Ar,Ac,Tr,Tc,grid))count++;
  25. }
  26. }
  27. return count;
  28. }
  29.  
  30. int countMinimum(int Ar,int Ac,int Tr,int Tc,char grid[1000][1000]){
  31. int minTiles = 1000000;
  32. for(int i = 1-Tr;i <= 0;i++){
  33. for(int j=1-Tc;j<=0;j++){
  34. int temp = countTiles(i,j,Ar,Ac,Tr,Tc,grid);
  35. if(temp < minTiles) minTiles = temp;
  36. }
  37. }
  38. return minTiles;
  39. }
  40.  
  41. int main(){
  42. int Ar,Ac,Tr,Tc;
  43. char grid[1000][1000];
  44. while(cin >> Ar >> Ac >> Tr >> Tc){
  45. for(int i=0;i<Ar;i++){
  46. char a;
  47. scanf("%c",&a);
  48. for(int j=0;j<Ac;j++){
  49. scanf("%c",&grid[i][j]);
  50. }
  51. }
  52. cout << countMinimum(Ar,Ac,Tr,Tc,grid) << endl;
  53. }
  54. return 0;
  55. }
  56.