Advertisement
a53

ROdiezv

a53
Jan 16th, 2022
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. # include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ifstream f("rodiezv.in");
  5. ofstream g("rodiezv.out");
  6.  
  7. int N, M, Max, K, nr, lat;
  8. struct rotromb
  9. {
  10. int l, c;
  11. int x, y;
  12. } v[50101];
  13. char s[2003];
  14. int S1[2002][2002], S2[2002][2002];
  15. int A[2002][2002];
  16.  
  17. bool cmp(rotromb x, rotromb y)
  18. {
  19. if(x.l == y.l)
  20. return x.c < y.c;
  21. return x.l < y.l;
  22. }
  23.  
  24. int verif_contur(int i, int j, int k)
  25. {
  26. int s1 = S1[i+k-1][j+k-1] - S1[i][j];
  27. int s2 = S1[i+2*(k-1)][j] - S1[i+k-1][j-k+1];
  28. int s3 = S2[i+k-1][j-k+1] - S2[i][j];
  29. int s4 = S2[i+2*(k-1)][j] - S2[i+k-1][j+k-1];
  30. return (s1 > 0 && s2 > 0 && s3 > 0 && s4 > 0);
  31. }
  32.  
  33. int latura(int i)
  34. {
  35. rotromb a, b;
  36.  
  37. a = v[i];
  38. b = v[i+1];
  39. int lat = b.c - a.c; /// latura posibilului romb
  40.  
  41. for(int j=i+2; j<K; ++j)
  42. {
  43. if(v[j].l == v[j+1].l && v[j].c == a.c && v[j+1].c == b.c)
  44. {
  45. if (v[j].l - a.l == lat)
  46. {
  47. int k = (lat+2) / 2;
  48. if (verif_contur(b.x, b.y, k) && k > 2)
  49. {
  50. nr++;
  51. return (lat + 2) / 2;
  52. }
  53. }
  54. }
  55. else if (a.c <= v[j].c && v[j].c <= b.c) return 0;
  56. }
  57. return 0;
  58. }
  59. int main()
  60. {
  61. int i, j;
  62. ios_base::sync_with_stdio(false);
  63. cin.tie(0);
  64.  
  65. f >> N;
  66. for(i=1; i<=N; i++)
  67. {
  68. f >> s;
  69. for(j=1; j<=N; j++)
  70. {
  71. S1[i][j] = S1[i-1][j-1];
  72. S2[i][j] = S2[i-1][j+1];
  73. if (s[j-1] == '#') v[++K] = {i+j-1, N-i+j, i, j};
  74. if (strchr("aeiou",s[j-1]))
  75. {
  76. S1[i][j] += 1;
  77. S2[i][j] += 1;
  78. }
  79. }
  80. }
  81.  
  82. sort(v+1, v+K+1, cmp);
  83.  
  84. for(i=1; i<=K; i++)
  85. {
  86. if (v[i].l == v[i+1].l)
  87. {
  88. lat = latura(i);
  89. if (lat > 0)
  90. Max = max(Max, lat);
  91. }
  92. }
  93.  
  94. g << nr << "\n" << Max << "\n";
  95.  
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement