Pagini recente » Cod sursa (job #175535) | Cod sursa (job #1878090) | Cod sursa (job #2182414) | pregatire_oji_11-12_ | Cod sursa (job #122947)
Cod sursa(job #122947)
#include<stdio.h>
#define Nm 101
int n,x,y;
void read()
{
n=100; x=2; y=25;
}
long double solve(int x, int y)
{
int i,j,k;
long double A[Nm][Nm],B[Nm][Nm],Cat[Nm],ans=0;
Cat[0]=1;
for(i=1;i<=n;++i)
Cat[i]=Cat[i-1]*(4*i-2)/(i+1);
A[0][0]=1;
for(i=1;i<=n;++i)
for(j=0;j<=i;++j)
{
if(i>j)
A[i][j]=A[i-1][j];
else
A[i][j]=0;
for(k=1;k<=j;++k)
A[i][j]+=A[i-k][j-k]*Cat[k-1];
}
for(j=0;j<=n;++j)
B[n][j]=1;
for(i=n-1;i>=0;--i)
for(j=i;j>=0;--j)
{
B[i][j]=B[i+1][j];
if(i>j)
B[i][j]+=B[i][j+1];
}
for(j=0;j<x;++j)
for(i=1;i<=y-x;++i)
ans+=A[x-1][j]*Cat[i-1]*B[x-1+i][j+i];
return ans/Cat[n];
}
void write(long double ans)
{
int x=ans*100,y,z;
y=ans*10000; z=y%10; y=y/10%10;
freopen("masina.out","w",stdout);
printf("%d.%d%d\n",x,y,z);
}
int main()
{
read();
if(x<y)
write(solve(x,y));
else
write(1-solve(y,x));
return 0;
}