Cod sursa(job #1972480)

Utilizator 2016Teo@Balan 2016 Data 23 aprilie 2017 11:28:46
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream in ("pic.in");
ofstream out ("pic.out");
int n,s=0,p;
long long lmax= 1LL <<62;
int m[55][55];
long long t[55][55];
void citire()
{
    in>>n;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=i; ++j)
        {
            in>>m[i][j];
            s+=m[i][j];
        }
}
bool verificare(long long x)
{
    memset(t,0,sizeof(t));
    t[1][1]=x;
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=i; ++j)
        {
            t[i+1][j]+=(t[i][j]-m[i][j]+1)/2;
            t[i+1][j+1]+=(t[i][j]-m[i][j])/2;
        }
    for(int i=1; i<=n; ++i)
        if (t[n][i]<m[n][i])
            return 0;
    return 1;
}
int main()
{
    int n,j,maxx=0,nr,poz;
    in>>p;
    if (p==1)
    {
        in>>n;
        for (int i=1; i<=n; i++)
        {
            s=0;
            for (int j=1; j<=i; j++)
            {
                in>>nr;
                s+=nr;
            }
            if (maxx<s)
            {
                maxx=s;
                poz=i;
            }
        }
        out<<poz;
        return 0;
    }
    citire();
    long long rez=-1,st=s,dr=lmax,mij;
    while(st<=dr)
    {
         mij=(dr+st)/2;
        if(verificare(mij)!=0)
        {
            rez=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    out<<rez<<" "<<rez-s<<'\n';

    return 0;
}