Advertisement
a53

colturi_dr

a53
Feb 20th, 2020
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream fin("colturi_dr.in");
  4. ofstream fout("colturi_dr.out");
  5. int n, m;
  6. int A0, A1, F0, F1;
  7. bool a[101][101];
  8. int p;
  9. // complexitate O(n * (n + 1) * m / 2)
  10. int main()
  11. {
  12. fin >> n >> m;
  13. for(int i = 1; i <= n; ++i)
  14. for(int j = 1; j <= m; ++j)
  15. fin >> a[i][j];
  16.  
  17. //luăm fiecare pereche de 2 linii distincte
  18. for(int i = 1; i < n; ++i)
  19. for(int j = i + 1; j <= n; ++j)
  20. {
  21. ++p;
  22. int cnt1 = 0, cnt0 = 0, l, p1 = 0, p0 = 0, l1 = 0, l0 = 0;
  23. //căutăm prima valoarea de 1 aflată pe ambele linii
  24. for(l = 1; l <= m; ++l)
  25. if(a[i][l] == a[j][l])
  26. if(a[i][l] == 1)
  27. {
  28. ++cnt1;
  29. p1 = l;
  30. break;
  31. }
  32. ++l;
  33. //căutăm toate pozițiile rămase pe care se află 1 pe ambele linii și contorizăm
  34. while(l <= m)
  35. {
  36. if(a[i][l] == a[j][l])
  37. if(a[i][l] == 1)
  38. {
  39. ++cnt1;
  40. l1 = l;
  41. }
  42. ++l;
  43. }
  44. //căutăm prima valoarea de 0 aflată pe ambele linii
  45. for(l = 1; l <= m; ++l)
  46. if(a[i][l] == a[j][l])
  47. if(a[i][l] == 0)
  48. {
  49. ++cnt0;
  50. p0 = l;
  51. break;
  52. }
  53. ++l;
  54. //căutăm toate pozițiile rămase pe care se află 0 pe ambele linii și contorizăm
  55. while(l <= m)
  56. {
  57. if(a[i][l] == a[j][l])
  58. if(a[i][l] == 0)
  59. {
  60. ++cnt0;
  61. l0 = l;
  62. }
  63. ++l;
  64. }
  65. F0 += (cnt0 - 1) * cnt0 / 2; // numărul de dreptunghiuri de extrem cu vârfuri 0
  66. F1 += (cnt1 - 1) * cnt1 / 2; // numărul de dreptunghiuri de extrem cu vârfuri 1
  67. int a0, a1;
  68. a0 = (j - i + 1) * (l0 - p0 + 1); // aria maximă a unui dreptunghi de extrem cu vârfuri 0
  69. a1 = (j - i + 1) * (l1 - p1 + 1); // aria maximă a unui dreptunghi de extrem cu vârfuri 1
  70. A0 = max(A0, a0);
  71. A1 = max(A1, a1);
  72. }
  73. fout << F0 + F1 << " ";
  74. if(A0 > A1)
  75. fout << A0 << " " << F0;
  76. if(A0 < A1)
  77. fout << A1 << " " << F1;
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement