#!/bin/sh f=/tmp/z$$ cat >$f.cpp <<'EOF' #include #include #include #include #include #include using namespace std; struct S{int t,x,y;}; double area(const vector&s,double h=.25){double A=0;vector>v;for(double x=h/2;x<140;x+=h){v.clear();for(auto q:s){if(q.t==2){if(abs(x-q.x)<=5)v.push_back({max(0.,q.y-5.),min(110.,q.y+5.)});}else{double r=q.t==0?20:5,d=r*r-(x-q.x)*(x-q.x);if(d>0){d=sqrt(d);v.push_back({max(0.,q.y-d),min(110.,q.y+d)});}}}sort(v.begin(),v.end());double a=-1,b=-1,L=0;for(auto z:v)if(z.second>z.first){if(a<0)a=z.first,b=z.second;else if(z.first>b)L+=b-a,a=z.first,b=z.second;else b=max(b,z.second);}if(a>=0)L+=b-a;A+=L*h;}return A;} int main(){vectors={{0,50,20},{0,125,90},{0,110,55},{0,70,55},{0,90,90},{0,90,20},{0,20,90},{0,30,55},{0,15,20},{0,125,20},{0,55,90},{1,135,50},{1,5,70},{1,5,55},{1,5,45},{2,135,60}};mt19937 g(123);uniform_int_distributionI(0,15),PX(0,28),PY(0,22);uniform_real_distributionU(0,1);double cur=area(s,.5),best=cur;auto bs=s;auto st=chrono::steady_clock::now();int it=0;while(chrono::duration(chrono::steady_clock::now()-st).count()<5.5){int i=I(g);auto o=s[i];s[i].x=5*PX(g);s[i].y=5*PY(g);double nv=area(s,.5);double T=15*exp(-3.0*(it%10000)/10000)+.05;if(nv>cur||U(g)best)best=cur,bs=s;it++;if(it%10000==0)s=bs,cur=best;} // coordinate descent at fine objective s=bs;for(int sw=0;sw<3;sw++){bool imp=0;for(int i=0;i<16;i++){auto o=s[i],bo=o;double bv=area(s,.25);for(int x=0;x<=140;x+=5)for(int y=0;y<=110;y+=5){s[i].x=x;s[i].y=y;double v=area(s,.25);if(v>bv+1e-8)bv=v,bo=s[i],imp=1;}s[i]=bo;}if(!imp)break;} cout<<"AREA025 "<