Cod sursa(job #1299349)

Utilizator heracleRadu Muntean heracle Data 23 decembrie 2014 16:46:38
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <cstdio>

FILE* in=fopen("munte.in","r");
FILE* out=fopen("munte.out","w");

const int X_ACT=107,H_MAX=57,H_ACT=57,K_ACT=57,INF=2000000000;

unsigned long long v[2][X_ACT][H_ACT][K_ACT];

int n,d,k;

int t[57];

int main()
{
    fscanf(in,"%d%d%d",&n,&d,&k);

    for(int i=1; i<=k; i++)
    {
        fscanf(in,"%d",&t[i]);
    }

    t[0]=INF;

    v[0][0][0][0]=1;

    for(int x=1; x<d; x++)
    {
        for(int h=1; h<=n; h++)
        {
            for(int p=0; p<=k; p++)
            {
                if(h==t[p])
                {
                    if(h==n)
                    {
                        v[1][x][h][p]+=v[0][x-1][h-1][p-1]+v[0][x-1][h][p-1]+v[0][x-1][h+1][p-1];
                        v[1][x][h][p]+=v[1][x-1][h-1][p-1]+v[1][x-1][h][p-1]+v[1][x-1][h+1][p-1];
                    }
                    else
                    {
                        v[0][x][h][p]+=v[0][x-1][h-1][p-1]+v[0][x-1][h][p-1]+v[0][x-1][h+1][p-1];
                        v[1][x][h][p]+=v[1][x-1][h-1][p-1]+v[1][x-1][h][p-1]+v[1][x-1][h+1][p-1];
                    }
                }
                else
                {
                    if(h==n)
                    {
                        v[1][x][h][p]+=v[0][x-1][h-1][p]+v[0][x-1][h][p]+v[0][x-1][h+1][p];
                        v[1][x][h][p]+=v[1][x-1][h-1][p]+v[1][x-1][h][p]+v[1][x-1][h+1][p];
                    }
                    else
                    {
                        v[0][x][h][p]+=v[0][x-1][h-1][p]+v[0][x-1][h][p]+v[0][x-1][h+1][p];
                        v[1][x][h][p]+=v[1][x-1][h-1][p]+v[1][x-1][h][p]+v[1][x-1][h+1][p];
                    }
                }

            }
        }
    }

    fprintf(out,"%lld",v[1][d-1][1][k]);

    return 0;
}