#include using namespace std; #define ll long long #define pb push_back #define ld long double const ld epsilon=1e-6; long double const degreeToRad=0.01745329; const ld cetTetromino=0.000001; struct point { long double x,y; }; struct figure { vector allPoints; vector> convexdots; long double bestAngle; long double minx,miny; long double maxx,maxy; ll index; }; point rotate(long double angle,point p) { long double s=sin(angle); long double c=cos(angle); long double newx= p.x*c-p.y*s; long double newy=p.x*s+p.y*c; point newp; newp.x=newx; newp.y=newy; return newp; } bool cmp(figure x,figure y) { long double heightx= x.maxy-x.miny; long double heighty= y.maxy-y.miny; return heightxq.y)continue; //printf("daljina:%lf p1x:%lf p1y:%lf p2x:%lf p2y:%lf q1x:%lf q1y:%lf\n",calculateDistance(p1,p2,q),p1.x,p1.y,p2.x,p2.y,q.x,q.y); long double temp=calculateDistance(p1,p2,q); if(temp0))continue; //printf("daljina:%lf p1x:%lf p1y:%lf p2x:%lf p2y:%lf q1x:%lf q1y:%lf\n",calculateDistance(p1,p2,q),p1.x,p1.y,p2.x,p2.y,q.x,q.y); long double temp=calculateDistance(p1,p2,q); if(temp 0)? 1: 2; // clock or counterclock wise } point p0; pair mrdanje[1000]; bool cmpForConvexHull(point a, point b) { return 0; } vector convexHull(figure allFigures[], ll n) { vector allPointsHull; for(int i=1;i<=n;i++){ for(auto j : allFigures[i].allPoints){ allPointsHull.pb(j); } } long double miny=allPointsHull[0].y; ll indexMiny=0; ll k=0; for(auto i:allPointsHull){ if(i.y< miny || (abs(i.y-miny)<1e-9 && i.x convexDots; convexDots= convexHull(allFigures,index); long double area = 0.0; int j = convexDots.size() - 1; ll n=convexDots.size(); for (int i = 0; i < n; i++) { area += (convexDots[j].x + convexDots[i].x) * (convexDots[j].y - convexDots[i].y); j = i; // j is previous vertex to i } return abs(area / 2.0); } bool checkTetromino(figure allFigures[],ll n) { for(int i=1;i<=n;i++){ if(abs(allFigures[i].maxx-allFigures[i].minx-2.0) indexOfNums[10]; for(int i=1;i<=n;i++){ ///figure to tetromino if(abs(allFigures[i].maxx-allFigures[i].minx-2.0)0){ ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j0){ if(indexOfNums[i].size()==1 && (cnt&1)==0)break; ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j0){ ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j0){ ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j0 || emptybox>0){ mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx-1.00; for(int j=0;j0 && indexOfNums[7].size()){ ll now= indexOfNums[7].back(); indexOfNums[7].pop_back(); rotateTetromino(allFigures,now,180*degreeToRad); ld prosek=allFigures[now].miny; mrdanje[now].second.y=prati-prosek+cetTetromino; mrdanje[now].second.x=dosad-allFigures[now].minx-1.00; for(int j=0;j0 && indexOfNums[2].size() && indexOfNums[6].size()){ ll now=indexOfNums[2][indexOfNums[2].size()-1]; indexOfNums[2].pop_back(); ld prosek=allFigures[now].miny; mrdanje[now].second.y=prati-prosek+1.0+cetTetromino; mrdanje[now].second.x=dosad-allFigures[now].minx-1.0; for(int j=0;j0){ ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j0 || emptybox<0){ mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx-1.00; for(int j=0;j0){ ll now=indexOfNums[i][indexOfNums[i].size()-1]; indexOfNums[i].pop_back(); ld prosek=allFigures[now].miny; if(firsTetromino){ prati=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx; firsTetromino=false; for(int j=0;j1){ prosek=allFigures[now].miny; mrdanje[now].second.y=prati-prosek; mrdanje[now].second.x=dosad-allFigures[now].minx-1.00; for(int j=0;j0){ ll now=indexOfNums[2][indexOfNums[2].size()-1]; indexOfNums[2].pop_back(); ld prosek=allFigures[now].miny; mrdanje[now].second.y=prati-prosek+1.0+cetTetromino; mrdanje[now].second.x=dosad-allFigures[now].minx-((double)emptybox); for(int j=0;j> f; for(int i=1;i<=f;i++){ //cout << i << ' '; cin >> n; allFigures[i].maxx= allFigures[i].maxy=-INT_MAX; allFigures[i].minx= allFigures[i].miny=INT_MAX; allFigures[i].index=i; for(int j=1;j<=n;j++){ point p; long double x,y; cin >> p.x >> p.y; allFigures[i].allPoints.pb(p); allFigures[i].maxx=max(allFigures[i].maxx,p.x); allFigures[i].maxy=max(allFigures[i].maxy,p.y); allFigures[i].minx=min(allFigures[i].minx,p.x); allFigures[i].miny=min(allFigures[i].miny,p.y); } allFigures[i].bestAngle=0; cin >> m; for(int j=1;j<=m;j++){ ll o; vector v; cin >> o; for(int k=0;k> pp; v.pb(pp); } allFigures[i].convexdots.pb(v); } } for(int i=1;i<=f;i++){ for(int j=1;j<=360;j++){ long double maxx,maxy,minx,miny; maxx=maxy=-INT_MAX; minx=miny=INT_MAX; for(auto k: allFigures[i].allPoints){ point p= rotate(j*degreeToRad,k); maxx=max(maxx,p.x); maxy=max(maxy,p.y); minx=min(minx,p.x); miny=min(miny,p.y); } if(maxy - miny < allFigures[i].maxy - allFigures[i].miny){ allFigures[i].minx=minx; allFigures[i].miny=miny; allFigures[i].maxx=maxx; allFigures[i].maxy=maxy; allFigures[i].bestAngle=j; } } mrdanje[i].first=allFigures[i].bestAngle; for(int j=0;jtempp){ index=j; tempp=temp; } } if(index==0){ for(int k=0;k