Naxocist

Longest

Apr 27th, 2022
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF 1e9
  5.  
  6. using ll = long long;
  7.  
  8. const int N = 1e3 + 3;
  9. string ar[N];
  10.  
  11.  
  12. int main(){
  13.     ios_base::sync_with_stdio(false); cin.tie(nullptr);
  14.  
  15.     int q; cin >> q;
  16.  
  17.     while(q--){
  18.         int n, m; cin >> n >> m;
  19.        
  20.         for(int i=0; i<n; ++i) cin >> ar[i];
  21.  
  22.         int dp[4][n+3][m+3];
  23.         memset(dp, 0, sizeof(dp));
  24.  
  25.         // right && down
  26.         for(int i=1; i<=n; ++i){
  27.             for(int j=1; j<=m; ++j){
  28.                 if(ar[i-1][j-1] == '1'){
  29.                     dp[0][i][j] = dp[0][i][j-1] + 1;
  30.                     dp[1][i][j] = dp[1][i-1][j] + 1;
  31.                 }
  32.             }
  33.         }
  34.  
  35.         // left && up
  36.         for(int i=n; i>0; --i){
  37.             for(int j=m; j>0; --j){
  38.                 if(ar[i-1][j-1] == '1'){
  39.                     dp[2][i][j] = dp[2][i][j+1] + 1;
  40.                     dp[3][i][j] = dp[3][i+1][j] + 1;
  41.                 }
  42.             }
  43.         }
  44.  
  45.         int a, b, mx = -1e9;
  46.         for(int i=1; i<=n; ++i){
  47.             for(int j=1; j<=m; ++j){
  48.                 a = max(dp[0][i][j], dp[2][i][j]);
  49.                 b = max(dp[1][i][j], dp[3][i][j]);
  50.                 mx = max(mx, a + b - 1); // right + up // right + down // left + up // left + down
  51.             }
  52.         }
  53.         cout << mx << '\n';
  54.        
  55.     }
  56.     return 0;
  57.  
  58. }
  59.  
  60.  
Advertisement
Add Comment
Please, Sign In to add comment