int n; double r,l[2000],a,b,c,d; double f(double a,double b){ if(a<0)a=0; if(b<0)b=0; if(a+b<=r)return 0; if(b+r<=a)return b*b*PI; if(a+r<=b)return a*a*PI; double ta=acos((r*r+a*a-b*b)/(r*a*2)); double tb=acos((r*r+b*b-a*a)/(r*b*2)); return a*a*(ta-sin(2*ta)/2)+b*b*(tb-sin(2*tb)/2); } { rd(n,r,l(n+1)); b=sum(l(n+1)); rep(i,n){ a+=l[i]; b-=l[i]; c=max[k=0---i](l[k])*2-a; d=max[k=i+1---n](l[k])*2-b; wt(f(a,b)-f(a,d)-f(c,b)+f(c,d)); } }