fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4.  
  5. vector<int> solution(vector<vector<int>> matrix) {
  6. int n = matrix.size();
  7. int m = matrix[0].size();
  8.  
  9. vector<vector<int> > dp_tl_br(n, vector<int>(m));
  10. vector<vector<int> > dp_tr_bl(n, vector<int>(m));
  11. vector<vector<int> > dp_br_tl(n, vector<int>(m));
  12. vector<vector<int> > dp_bl_tr(n, vector<int> (m));
  13.  
  14.  
  15. for(int i = 0; i < n; ++i) {
  16. for(int j = 0; j < m; ++j) {
  17. if(matrix[i][j] == 0) {
  18. dp_tl_br[i][j] = 0;
  19. continue;
  20. }
  21. dp_tl_br[i][j] = 1 + ((i - 1 >= 0 && j - 1 >= 0)? dp_tl_br[i - 1][j - 1]: 0);
  22. }
  23. }
  24.  
  25.  
  26. for(int i = 0; i < n; ++i) {
  27. for(int j = m - 1; j >= 0; --j) {
  28. if(matrix[i][j] == 0) {
  29. dp_tr_bl[i][j] = 0;
  30. continue;
  31. }
  32. dp_tr_bl[i][j] = 1 + ((i - 1 >= 0 && j + 1 < m)? dp_tr_bl[i - 1][j + 1]: 0);
  33. }
  34. }
  35.  
  36.  
  37. for(int i = n - 1; i >= 0; --i) {
  38. for(int j = m - 1; j >= 0; --j) {
  39. if(matrix[i][j] == 0) {
  40. dp_br_tl[i][j] = 0;
  41. continue;
  42. }
  43. dp_br_tl[i][j] = 1 + ((i + 1 < n && j + 1 < m)? dp_br_tl[i + 1][j + 1]: 0);
  44. }
  45. }
  46.  
  47.  
  48. for(int i = n - 1; i >= 0; --i) {
  49. for(int j = 0; j < m; ++j) {
  50. if(matrix[i][j] == 0) {
  51. dp_bl_tr[i][j] = 0;
  52. continue;
  53. }
  54. dp_bl_tr[i][j] = 1 + ((i + 1 < n && j - 1 >= 0)? dp_bl_tr[i + 1][j - 1]: 0);
  55. }
  56. }
  57.  
  58.  
  59. int cur_max = 0;
  60. int x;
  61. int y;
  62.  
  63. for(int i = 0; i < n; ++i) {
  64. for(int j = 0; j < m; ++j) {
  65. if (matrix[i][j] == 0) {
  66. continue;
  67. }
  68.  
  69. int A = dp_tl_br[i][j];
  70. int B = dp_tr_bl[i][j];
  71. int C = dp_br_tl[i][j];
  72. int D = dp_bl_tr[i][j];
  73.  
  74. A = min(A, B);
  75. A = min(A, C);
  76. A = min(A, D);
  77.  
  78. if (A > cur_max) {
  79. cur_max = A;
  80. x = i;
  81. y = j;
  82. }
  83. }
  84. }
  85.  
  86. return {x, y};
  87. }
  88.  
  89. int main()
  90. {
  91. vector<vector<int> > matrix = {{0,0,0,1,1}};
  92.  
  93.  
  94. vector<int> ans = solution(matrix);
  95. cout << ans[0] << " " << ans[1];
  96.  
  97. return 0;
  98. }
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
0 3