#include<bits/stdc++.h>
using namespace std;
const int MA=500009;
const double pi=acos(-1);
struct node
{
double x,y;
node(){}
node(double a,double b){x=a,y=b;}
bool operator<(node a)const
{
if(x!=a.x)return x<a.x;
return y<a.y;
}
}e[MA],st[MA];
struct vec
{
node a1,a2;
vec(){}
vec(node a,node b){a1=a;a2=b;}
double operator^(vec a)const
{
return (a2.x-a1.x)*(a.a2.y-a.a1.y)-(a2.y-a1.y)*(a.a2.x-a.a1.x);
}
};
int n,cnt;
double ai,bi,lx,ly,r;
void xz(double a,double b,double c)
{
e[++cnt]=node(a+lx*cos(c)-sin(c)*ly,b+cos(c)*ly+lx*sin(c));
e[++cnt]=node(a-lx*cos(c)-sin(c)*ly,b+cos(c)*ly-lx*sin(c));
e[++cnt]=node(a+lx*cos(c)+sin(c)*ly,b-cos(c)*ly+lx*sin(c));
e[++cnt]=node(a-lx*cos(c)+sin(c)*ly,b-cos(c)*ly-lx*sin(c));
}
double fac(double a)
{
return a*a;
}
double dis(node a,node b)
{
return sqrt(fac(a.x-b.x)+fac(a.y-b.y));
}
void work()
{
sort(e+1,e+cnt+1);
st[0]=e[1];
st[1]=e[2];
int tot=1;
for(int i=3;i<=cnt;i++)
{
while(tot&&((vec(st[tot-1],st[tot])^vec(st[tot],e[i]))<=0))
{
tot--;
}
st[++tot]=e[i];
}
st[++tot]=e[cnt-1];
for(int i=cnt-2;i;i--)
{
while(tot&&((vec(st[tot-1],st[tot])^vec(st[tot],e[i]))<=0))
{
tot--;
}
st[++tot]=e[i];
}
double ans;
for(int i=0;i<tot;i++)
{
ans+=dis(st[i],st[i+1]);
}
ans+=pi*2*r;
printf("%.2lf\n",ans);
}
signed main()
{
cin>>n;
cin>>ai>>bi>>r;
lx=bi/2-r;
ly=ai/2-r;
for(int i=1;i<=n;i++)
{
double x,y,t;
cin>>x>>y>>t;
xz(x,y,t);
}
work();
return 0;
}
改过long double也不对,应该不是精度问题,求大佬帮忙!