Cod sursa(job #517407)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 28 decembrie 2010 17:34:05
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<cstdio>
#define LL long long
LL S,nr[4],v[4],st[4],dr[4];
void read()
{
    freopen("plus.in","r",stdin);
    freopen("plus.out","w",stdout);
    scanf("%lld",&S);
    for(int i=1;i<=3;i++)
        scanf("%lld%lld",&nr[i],&v[i]);
}
LL min(LL x,LL y)
{
    return x<y?x:y;
}
LL max(LL x,LL y)
{
    return x>y?x:y;
}
void init()
{
    S+=v[1];
    for(int i=1;i<=3;i++)
    {
        st[i]=min(0,nr[i]*v[i]);
        dr[i]=max(0,nr[i]*v[i]);
    }
}
void solve()
{
    LL rez=0;
    for(int i=0;i<=nr[1];i++)
    {
        S-=v[1];
        if(!v[2])
        {
            if(!v[3])
            {
                if(S==0)
                    rez+=(nr[2]+1)*(nr[3]+1);
                continue;
            }
            if(S/v[3]<=nr[3] && S/v[3]>=0)
                rez+=nr[2]+1;
            continue;
        }
        if(!v[3])
        {
            if(S/v[2]<=nr[2] && S/v[2]>=0)
                rez+=nr[3]+1;
            continue;
        }
        LL x,y;
        x=S-dr[2];
        y=S-st[2];
        if(min(y,dr[3])-max(x,st[3])+1>0)
            rez+=min(y,dr[3])-max(x,st[3])+1;
    }
    printf("%lld",rez);
}
int main()
{
    read();
    init();
    solve();
    return 0;
}