#include #include #include // Units: density = 1; G = 1. typedef double R; int sq(int x) {return x*x;} R p1(R x, R yz){R r2 = x*x+yz; return log((sqrt(r2-2*x+1)-x+1)/(sqrt(r2)-x));} R p2(R x, R yz){return p1((x+1)/2, yz/4);} R p3(R L, R x, R yz){R r = 1./L; return p2(x*r, yz*r*r);} R pste(R L, R B){R B2 = B*B, r = 2*L, r2 = r*r, bd = sqrt(2*B2 + r2); return 4*(B2*(log(B*sqrt(2)/(bd-r)) - atan(r/bd)) + B*r*(log((B+bd)/(bd-B))) - 0.5*r2*atan(B2/(r*bd)));} #define lr 20 #define lm (2*lr+1) const R d2=1/(R)(lr*lr); int main(){R L[lr+1][lm], P[lr+1][lm]; R pma=0, pmi=1.e10, m0 = 0, m1 = 0, m2 = 0; int ima, jma, imi, jmi; for(int i=0; i0 || i>0 && L[i-1][j]>0 || i0 || j>0 && L[i][j-1]>0 || j0) {R p = 0; for(int k=0; k0) { if(i!=k-lr || j!=l) p += p3(L[mir][l], L[i][j], (sq(i+lr-k)+sq(j-l))*d2); else p += pste(2*L[i][j], 0.5/lr)/d2;}} {R q = p*d2; P[i][j] = q; if(L[i][j]>0){ if(q>pma) {pma=q; ima=i; jma=j;} if(q