Cod sursa(job #1973221)

Utilizator STEFAN18Miclaus Stefan STEFAN18 Data 24 aprilie 2017 19:41:48
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>

using namespace std;

int a[51][51],ca[51][51];

int main()
{
    freopen("pic.in","r",stdin);
    freopen("pic.out","w",stdout);
    int cer,n,i,l1,l2,j,pp,m,poz,s=0,su=0;
    scanf("%d%d",&cer,&n);
    l1=1;
    l2=10000000;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=i;j++)
        {
            scanf("%d",&a[i][j]);
            s+=a[i][j];
        }
    }
    while(l1<=l2)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=i;j++)
            {
                ca[i][j]=0;
            }
        }
        pp=0;
        m=(l1+l2)/2;
        ca[1][1]=m;
        su=0;
        for(i=1;i<=n && pp==0;i++)
        {
            for(j=1;j<=i;j++)
            {
                if(ca[i][j]>=a[i][j])
                {
                    ca[i][j]-=a[i][j];
                    su+=ca[i][j];
                    if(ca[i][j]>0)
                    {
                        ca[i+1][j]+=(ca[i][j]+1)/2;
                        ca[i+1][j+1]+=ca[i][j]/2;
                    }
                }
            }
        }
        if(su>=s)
        {
            l2=m-1;
            poz=m;
        }
        else
        {
            l1=m+1;
        }
    }
    printf("%d",poz);

    return 0;
}