# URAL1066[Garland]

CODE:

/*

PROGRAM: \$PROGRAM

AUTHOR: Su Jiao

DATE: 2010-4-8

DESCRIPTION:

\$DESCRIPTION

*/

#include <iostream>

using std::cin;

using std::cout;

using std::endl;

#include <iomanip>

#include <cstring>

using std::memset;

#define oo 1e10

#define MAXN 1000

int N;

double A;

double B;

{

cin>>N>>A;

}

void write()

{

cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);

cout<<B<<endl;

}

void solve()

{

/*

h[i]=(h[i-1]+h[i+1])/2-1

h[i]*2+2=(h[i-1]+h[i+1])

h[i+1]=h[i]*2+2-h[i-1]

h[i]=h[i-1]*2-h[i-2]+2

h[i]-h[i-1]=h[i-1]-h[i-2]+2

a[i]=h[i]-h[i-1]

a[2]=h[2]-h[1]

a[i]=a[i-1]+2

所以a[i]=a[2]+(i-2)*2

h[i]=h[i]-h[i-1]+h[i-1]-h[i-2]+…+h[2]-h[1]+h[1]

=a[i]       +a[i-1]       +…+a[2]     +h[1]

=sum{a[j],2<=j<=i}+h[1]

=sum{(a[2]+(j-2)*2),2<=j<i}+h[1]

=(i-2+1)*a[2]+(0+(i-2)*2)*(i-2+1)/2+h[1]

=(i-1)*(h[2]-h[1])+(i-2)*(i-1)+h[1]

=(i-1)*h[2]-(i-2)*h[1]+(i-2)*(i-1)

*/

double h[MAXN+2];

h[1]=A;

B=oo;

for (int i=2;i<=N;i++)//假设其中一个贴地

{

h[i]=0;

h[2]=(h[i]-(i-2)*(i-1)+(i-2)*h[1])/(i-1);

bool can=true;

for (int j=2;j<=N;j++)

{

h[j]=(j-1)*h[2]-(j-2)*h[1]+(j-2)*(j-1);

if (h[j]<0)

{

can=false;

break;

}

}

if (can)

if (B>h[N]) B=h[N];

}

}

int main()

{

solve();

write();

return 0;

}