fork download
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4. using namespace std;
  5. using namespace __gnu_pbds; // needed for tree + PBDS
  6.  
  7. #define pb push_back
  8. #define all(x) x.begin(), x.end()
  9. typedef long long ll;
  10. const ll INF = (ll)1e18;
  11. const ll MOD = 1000000000+7 ;
  12. const double eps = 1e-9 ;
  13. template <class T>
  14. using ordered_set = tree<
  15. T,
  16. null_type,
  17. less<T>,
  18. rb_tree_tag,
  19. tree_order_statistics_node_update
  20. >;
  21. int n , m ;
  22. bool valid (int i , int j) {
  23. return i >= 0 && i < n && j >= 0 && j < m ;
  24. }
  25. void solve() {
  26.  
  27. int k ; cin >> n >> m >> k ;
  28. vector < vector< char > > matrix(n , vector < char >(m , '.')) ;
  29. ll cnt = 0 ;
  30. for (int i = 0 ; i <n ; i ++ ) {
  31. for (int j=0 ; j< m ; j ++) {
  32. cin >> matrix[i][j] ;
  33. if (matrix[i][j] =='g')cnt ++ ;
  34. }
  35. }
  36. ll mini = n*m;
  37. vector < vector < ll > > prefixgold(n,vector < ll > (m , 0 )) ;
  38. for (int i = 0 ; i< n ; i ++) {
  39. for (int j = 0 ; j <m ; j ++ ) {
  40. prefixgold[i][j] = (matrix[i][j ] == 'g') ;
  41. if (valid(i , j -1 ) ) prefixgold[i][j] +=prefixgold[i][j-1] ;
  42. if (valid(i-1 , j ) ) prefixgold[i][j] +=prefixgold[i-1][j] ;
  43. if (valid(i-1 , j -1 ) ) prefixgold[i][j] -=prefixgold[i-1][j-1] ;
  44. }
  45. }
  46.  
  47.  
  48. for (int i = 0 ; i < n ; i ++ ) {
  49. for (int j = 0 ; j < m ; j ++ ) {
  50. ll loss= 0 ;
  51. if (matrix[i][j] != '.')continue ;
  52. int begini= max(0 , i-k+1) , endi = min (i + k-1 , n -1 ), beginj= max(0 , j-k+1) , endj = min (j + k-1 , m -1 );
  53. loss = prefixgold[endi][endj] ;
  54. if (valid (begini -1 , endj )) loss-=prefixgold[begini-1][endj] ;
  55. if (valid (endi , beginj-1 )) loss-=prefixgold[endi][beginj-1] ;
  56. if (valid (begini-1 , beginj-1 )) loss+=prefixgold[begini-1][beginj-1] ;
  57.  
  58. // cout << i <<" " << j << " " << loss << endl ;
  59. mini = min( loss , mini ) ;
  60. }
  61. }
  62. cout << cnt- mini << endl ;
  63.  
  64.  
  65. }
  66.  
  67.  
  68.  
  69. int main() {
  70. ios::sync_with_stdio(false);
  71. cin.tie(nullptr);
  72. #ifndef ONLINE_JUDGE
  73. freopen("input.txt", "r", stdin);
  74. freopen("output.txt", "w", stdout);
  75. #endif
  76. int t = 1 ; cin >> t;
  77. int maxi = 200000 + 5;
  78.  
  79. while (t--) solve();
  80. return 0;
  81. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
0