Advertisement
a53

drept1

a53
May 8th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct punct {
  7. int x;
  8. int y;
  9. };
  10.  
  11. punct v[210];
  12. int C, t, n, xmin, xmax, ymin, ymax, i, d, j, k;
  13. int poligon, aria, jos, stanga;
  14.  
  15. int punctPeSegment(int i, int j) {
  16. if (v[i].x >= min(v[j].x, v[j+1].x) && v[i].x <= max(v[j].x, v[j+1].x))
  17. if (v[i].y >= min(v[j].y, v[j+1].y) && v[i].y <= max(v[j].y, v[j+1].y))
  18. return 1;
  19. return 0;
  20. }
  21.  
  22. int intersectieSegmente(punct a, punct b, punct c, punct d) {
  23. punct aux;
  24. if (a.x > b.x) {
  25. aux = a;
  26. a = b;
  27. b = aux;
  28. }
  29. if (c.y > d.y) {
  30. aux = c;
  31. c = d;
  32. d = aux;
  33. }
  34. if ((c.y - a.y) * 1LL * (d.y - a.y) <= 0)
  35. if ((c.x - a.x) * 1LL * (c.x - b.x) <= 0)
  36. return 1;
  37. return 0;
  38. }
  39.  
  40. int main () {
  41. ifstream fin ("drept.in");
  42. ofstream fout("drept.out");
  43.  
  44. fin>>C>>t;
  45.  
  46. for (;t--;) {
  47. fin>>n;
  48. xmin = xmax = ymin = ymax = 0;
  49. v[0].x = 0;
  50. v[0].y = 0;
  51. for (i=1;i<=n;i++) {
  52. fin>>d;
  53. if (i%2 == 1) {
  54. v[i].x = v[i-1].x + d;
  55. v[i].y = v[i-1].y;
  56. } else {
  57. v[i].x = v[i-1].x;
  58. v[i].y = v[i-1].y + d;
  59. }
  60. xmin = min(xmin, v[i].x);
  61. xmax = max(xmax, v[i].x);
  62. ymin = min(ymin, v[i].y);
  63. ymax = max(ymax, v[i].y);
  64. }
  65.  
  66. poligon = 1;
  67. if (v[n].x != 0 || v[n].y != 0)
  68. poligon = 0;
  69.  
  70. for (i=0;i<n-1;i++) {
  71. for (j=i+2;j<n;j++) {
  72. if (i == 0 && j == n-1)
  73. continue;
  74.  
  75. if (i%2 == j%2) {
  76. /// paralele
  77. if (punctPeSegment(i, j))
  78. poligon = 0;
  79. if (punctPeSegment(i+1, j))
  80. poligon = 0;
  81. if (punctPeSegment(j, i))
  82. poligon = 0;
  83. if (punctPeSegment(j+1, i))
  84. poligon = 0;
  85. } else {
  86. if (i%2 == 0) {
  87.  
  88. if (intersectieSegmente(v[i], v[i+1], v[j], v[j+1]))
  89. poligon = 0;
  90. } else {
  91. if (intersectieSegmente(v[j], v[j+1], v[i], v[i+1]))
  92. poligon = 0;
  93. }
  94. }
  95.  
  96.  
  97. }
  98.  
  99. }
  100. if (C!=1) {
  101. aria = 0;
  102. for (i=xmin+1;i<=xmax;i++)
  103. for (j=ymin+1;j<=ymax;j++) {
  104. jos = 0;
  105. stanga = 0;
  106. for (k=0;k<n;k++) {
  107. if (k%2 == 1) {
  108.  
  109. if (v[k].x < i && min(v[k].y, v[k+1].y) < j && max(v[k].y, v[k+1].y) >= j)
  110. stanga++;
  111.  
  112. } else {
  113. if (v[k].y < j && min(v[k].x, v[k+1].x) < i && max(v[k].x, v[k+1].x) >= i)
  114. jos++;
  115. }
  116. }
  117. if (stanga % 2 && jos % 2)
  118. aria++;
  119. }
  120. }
  121. if (C == 1) {
  122. fout<<poligon<<" ";
  123. } else {
  124.  
  125. fout<<aria<<" ";
  126. }
  127.  
  128. }
  129.  
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement