(I2
I147
I4
(dp0
Vsquares.%l
p1
(Vmain.c
p2
S'#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <math.h>\r\n#define eps 0.000000001\r\n\r\nstruct punct{\r\n  double x, y;\r\n} centru, piv;\r\n\r\nstruct dreapta{\r\n  double a, b, c;\r\n} d1, d2;\r\n\r\nint det(struct punct p1, struct punct p2, struct punct p3){\r\n  double jkjk=((p2.x-p3.x)*(p2.y-p1.y)-(p2.y-p3.y)*(p2.x-p1.x));\r\n  if(fabs(jkjk)<eps)\r\n    return 0;\r\n  if(jkjk>0)\r\n    return 1;\r\n  return -1;\r\n}\r\n\r\nstruct dreapta coefdr(struct punct p1, struct punct p2){\r\n  struct dreapta d;\r\n  d.a=p2.y-p1.y;\r\n  d.b=p1.x-p2.x;\r\n  d.c=p2.x*p1.y-p1.x*p2.y;\r\n  return d;\r\n}\r\n\r\nstruct punct intersectie(struct dreapta d1, struct dreapta d2){\r\n  struct punct p;\r\n  if(fabs(d1.a*d2.b-d2.a*d1.b)<eps){\r\n    p.x=-54;\r\n  } else{\r\n    p.x=(d2.c*d1.b-d1.c*d2.b)/(d1.a*d2.b-d2.a*d1.b);\r\n    p.y=(d2.c*d1.a-d1.c*d2.a)/(d2.a*d1.b-d1.a*d2.b);\r\n  }\r\n  return p;\r\n}\r\n\r\nstruct chestii{\r\n  struct punct p[15];\r\n} inters, inters2;\r\n\r\nstruct patrat{\r\n  struct  punct p[4];\r\n} v[10];\r\n\r\nint apartinep(struct patrat P, struct punct k){\r\n  int aux=0, i;\r\n  for(i=0, aux=0; i<4; i++)\r\n    if(det(k, P.p[i], P.p[(i+1)%4])==0)\r\n      return 1;\r\n    else\r\n      aux+=det(k, P.p[i], P.p[(i+1)%4]);\r\n  if(aux==-4 || aux==4)\r\n    return 1;\r\n  return 0;\r\n}\r\n\r\nint apartinef(struct chestii P, int nrp, struct punct k){\r\n  int aux, i;\r\n  for(i=0, aux=0; i<nrp; i++)\r\n    if(det(k, P.p[i], P.p[(i+1)%nrp])==0)\r\n      return 1;\r\n    else\r\n      aux+=det(k, P.p[i], P.p[(i+1)%nrp]);\r\n  if(aux==-nrp || aux==nrp)\r\n    return 1;\r\n  return 0;\r\n}\r\n\r\nvoid sortpct(int be, int en){\r\n  int b=be, e=en;\r\n  piv=inters2.p[be+rand()%(en-be+1)];\r\n  while(b<=e){\r\n    while(det(inters2.p[0], piv, inters2.p[b])==1)\r\n      ++b;\r\n    while(det(inters2.p[0], piv, inters2.p[e])==-1)\r\n      --e;\r\n    if(b<=e){\r\n      centru=inters2.p[b]; inters2.p[b]=inters2.p[e]; inters2.p[e]=centru;\r\n      ++b; --e;\r\n    }\r\n  }\r\n  if(be<e)\r\n    sortpct(be, e);\r\n  if(b<en)\r\n    sortpct(b, en);\r\n}\r\n\r\nint main()\r\n{\r\n    freopen("b1.in", "r", stdin);\r\n    freopen("b1.out", "w", stdout);\r\n    int n, i, patr, cons, cop, inter, inter2, j, k, t;\r\n    double area, aria;\r\n    scanf("%d", &n);\r\n    for(i=0; i<n; i++){\r\n      scanf("%lf%lf%lf%lf", &centru.x, &centru.y, &v[i].p[0].x, &v[i].p[0].y);\r\n      v[i].p[1].x=centru.x-(centru.y-v[i].p[0].y);\r\n      v[i].p[1].y=centru.y+(centru.x-v[i].p[0].x);\r\n      v[i].p[2].x=centru.x-(centru.y-v[i].p[1].y);\r\n      v[i].p[2].y=centru.y+(centru.x-v[i].p[1].x);\r\n      v[i].p[3].x=centru.x-(centru.y-v[i].p[2].y);\r\n      v[i].p[3].y=centru.y+(centru.x-v[i].p[2].x);\r\n    }\r\n    area=0.0;\r\n    for(patr=1; patr<(1<<n); patr++){\r\n      cons=-1;\r\n      for(i=0; i<n; i++)\r\n        if((1<<i)&patr)\r\n          cons=-cons;\r\n      i=0; cop=patr;\r\n      while((cop&1)==0){\r\n        ++i;\r\n        cop>>=1;\r\n      }\r\n      for(j=0; j<4; j++)\r\n        inters.p[j]=v[i].p[j];\r\n      inter=4;\r\n      cop>>=1; ++i;\r\n      while(inter>2 && cop){\r\n        if(cop&1){\r\n          inter2=0;\r\n          for(j=0; j<4; j++)\r\n            for(k=0; k<inter; k++){\r\n              // punctul de intersectie\r\n              d1=coefdr(v[i].p[j], v[i].p[(j+1)%4]);\r\n              d2=coefdr(inters.p[k], inters.p[(k+1)%inter]);\r\n              centru=intersectie(d1, d2);\r\n              if(centru.x!=-54)\r\n                if(apartinep(v[i], centru) && apartinef(inters, inter, centru)){\r\n                  t=0;\r\n                  while(t<inter2 && (fabs(inters2.p[t].x-centru.x)>=eps || (inters2.p[t].y-centru.y)>=eps))\r\n                    ++t;\r\n                  if(t>=inter2)\r\n                    inters2.p[inter2++]=centru;\r\n                }\r\n            }\r\n          for(j=1; j<inter2; j++)\r\n            if(inters2.p[j].x<inters2.p[0].x || (fabs(inters2.p[j].x-inters2.p[0].x)<eps && inters2.p[j].y<inters2.p[0].y)){\r\n              centru=inters2.p[j]; inters2.p[j]=inters2.p[0]; inters2.p[0]=centru;\r\n            }\r\n          if(inter2>2)\r\n            sortpct(1, inter2-1);\r\n          // ordonam punctele\r\n          inters=inters2;\r\n          inter=inter2;\r\n        }\r\n        ++i; cop>>=1;\r\n      }\r\n      // facem aria\r\n      if(inter>2){\r\n        aria=0.0;\r\n        for(j=0; j<inter; j++)\r\n          aria+=(1.0*inters.p[j].x*inters.p[(j+1)%inter].y-inters.p[j].y*inters.p[(j+1)%inter].x);\r\n        area+=fabs(aria/2.0)*cons;\r\n      }\r\n    }\r\n    printf("%d\\n", (int)(area+0.5));\r\n//    centru.x=-53.333333333333336;\r\n//    centru.y=23.333333333333332;\r\n//    for(j=0; j<4; j++)\r\n//      inters.p[j]=v[1].p[j];\r\n//    printf("%d", apartinep(v[1], centru));\r\n    return 0;\r\n}\r\n'
p3
tp4
stp5
.