Morass

PLUS-SONGMAN

Sep 9th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using LINT = long long int;
  5. using PII = pair<int,int>;
  6.  
  7. #define PB push_back
  8. #define FI first
  9. #define SE second
  10. #define REP(i,n) for(int i=0;i<(n);++i)
  11. #define FOR(i, a, b) for(int i=(a);i<(b);++i)
  12.  
  13. int t;
  14.  
  15. int n;
  16. string grid[2007];
  17. int dpu[2007][2007];
  18. int dpb[2007][2007];
  19. int dpl[2007][2007];
  20. int dpr[2007][2007];
  21.  
  22. void process(){
  23.     cin>>n;
  24.     REP(i,n)cin>>grid[i];
  25.     memset(dpu, 0, sizeof(dpu));
  26.     memset(dpb, 0, sizeof(dpb));
  27.     memset(dpl, 0, sizeof(dpl));
  28.     memset(dpr, 0, sizeof(dpr));
  29.  
  30.     FOR(i,1,n)
  31.     REP(j,n){
  32.         if(grid[i][j]=='#'){
  33.         dpu[i][j] = dpu[i-1][j] + (grid[i-1][j]=='#');
  34.         }
  35.     }
  36.     REP(j,n)
  37.     FOR(i,1,n){
  38.         if(grid[j][i]=='#'){
  39.             dpl[j][i] = dpl[j][i-1] + (grid[j][i-1]=='#');
  40.         }
  41.     }
  42.  
  43.     for(int i = n-2;i>=0;--i)
  44.     REP(j,n){
  45.         if(grid[i][j]=='#'){
  46.         dpb[i][j] = dpb[i+1][j] + (grid[i+1][j]=='#');
  47.         }
  48.     }
  49.     REP(j,n)
  50.     for(int i = n-2;i>=0;--i){
  51.         if(grid[j][i]=='#'){
  52.         dpr[j][i] = dpr[j][i+1] + (grid[j][i+1]=='#');
  53.         }
  54.     }
  55.  
  56.     int best = 0;
  57.  
  58.     REP(i,n)
  59.     REP(j,n)
  60.         if(grid[i][j]=='#') {
  61.             best = max(best, min(dpr[i][j],min(dpl[i][j],min(dpu[i][j],dpb[i][j])))+1);
  62.             // cout<<i<<' '<<j<<' '<<best<<endl;
  63.         }
  64.  
  65.     cout<<best<<endl;
  66. }
  67.  
  68. int main() {
  69.     cin>>t;
  70.     while(t--)process();
  71.  
  72.     return 0;
  73. }
Add Comment
Please, Sign In to add comment