Cod sursa(job #122947)

Utilizator sealTudose Vlad seal Data 13 ianuarie 2008 22:49:41
Problema Hvrays Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#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;
}