Heliport
const double eps = 1e-6 ;
int x[25 ], y[25 ], n, i, len, px, py, cases;
double ra, rb, r;
char dr;
bool check(double ox, double oy)
{
int i, s;
s = 0 ;
for (i = 0 ; i < n; i++)
if (x[i]>ox&&((y[i]>oy)^(y[i+1 ]>oy))) s++;
if (s % 2 == 0 )return false;
for (i = 0 ; i < n; i++)
{
if ((x[i] - ox)*(x[i] - ox) + (y[i] - oy)*(y[i] - oy) < (r - eps)*(r - eps))
return false;
if (x[i] == x[i + 1 ] && ((y[i] > oy) ^ (y[i + 1 ] > oy)) && fabs(x[i] - ox) < r - eps)return false;
if (y[i] == y[i + 1 ] && ((x[i] > ox) ^ (x[i + 1 ] > ox)) && fabs(y[i] - oy) < r - eps)return false;
}
return true;
}
bool ok()
{
int i, j;
double di, dd, mx, my, dx, dy;
for (i = 0 ; i < n; i++)
if (x[i] == x[i + 1 ])
for (j = 0 ; j < n;j++)
if (y[j] == y[j + 1 ]){
if (check(x[i] + r, y[j] + r))return true;
if (check(x[i] + r, y[j] - r))return true;
if (check(x[i] - r, y[j] + r))return true;
if (check(x[i] - r, y[j] - r))return true;
}
for (i = 0 ; i < n; i++)
for (j = 0 ; j < n;j++)
if (x[i] == x[i + 1 ])
{
di = fabs(x[j] - (x[i] + r));
if (di < r)
{
dd = sqrt(r*r-di*di);
if (check(x[i] + r, y[j] + dd))return true;
if (check(x[i] + r, y[j] - dd))return true;
}
di = fabs(x[j]-(x[i]-r));
if (di < r)
{
dd = sqrt(r*r - di*di);
if (check(x[i] + r, y[j] + dd))return true;
if (check(x[i] + r, y[j] - dd))return true;
}
}
else
{
di = fabs(y[j]-(y[i]+r));
if (di < r)
{
dd = sqrt(r*r - di*di);
if (check(x[i] + dd, y[j] + r))return true;
if (check(x[i] - dd, y[j] + r))return true;
}
di = fabs(y[j] - (y[i] - r));
if (di < r)
{
dd = sqrt(r*r - di*di);
if (check(x[i] + dd, y[j] + r))return true;
if (check(x[i] + dd, y[j] - r))return true;
}
}
for (i = 0 ; i < n - 1 ; i++)
for (j = i + 1 ; j < n; j++)
{
mx = (x[i]+x[j])/2.0 ;
my = (y[i]+y[j])/2.0 ;
di = sqrt((x[i]-mx)*(x[i]-mx)+(y[i]-my)*(y[i]-my));
if (di>0 && di < r)
{
dd = sqrt(r*r-di*di);
dx = (my - y[i]) / di*dd;
dy = (x[i]-mx)/di*dd;
if (check(mx + dx, my + dy))return true;
if (check(mx - dx, my - dy))return true;
}
}
return false;
}
int main()
{
while (scanf_s("%d" ,&n)&&n)
{
if (cases)printf("\n" );
px = 0 ; py = 0 ;
for (i = 1 ; i <= n; i++)
{
scanf_s("%d %c" , &len, &dr);
if (dr == 'R' )px += len;
if (dr == 'L' )px -= len;
if (dr == 'U' )py += len;
if (dr == 'D' )py -= len;
x[i] = px;
y[i] = py;
}
ra = 0 ; rb = 999 ;
while (rb - ra > eps)
{
r = (ra + rb) / 2 ;
if (ok())ra = r;
else rb = r;
}
printf("Case Number %d radius is: %.21f\n" , ++cases, r);
}
return 0 ;
}