Cod sursa(job #2021729)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 14 septembrie 2017 16:01:44
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <algorithm>
#include <stdio.h>

#define ll long long

using namespace std;

ll s, nrBile, val, nA, vA, nB, vB, sol;

inline ll formeazaSol(ll sum)
{
    if (!vA)
    {
        if (vB == -1)
            if (sum <= 0 && -nB <= sum)
                return nA + 1;

        if (!vB)
            if (!sum)
                return (nA + 1) * (nB + 1);

        if (vB == 1)
            if (sum >= 0 && nB >= sum)
                return nA + 1;
    }

    ll a = vA, b = vB;

    if (a == -1)
    {
        a *= -1;
        b *= -1;
        sum *= -1;
    }

    if (a == 1)
    {
        if (b == -1)
        {
            if (sum < 0)
                return max((ll) 0, min(nA, nB + sum) + 1);
            if (sum >= 0)
                return max((ll) 0, min(nA - sum, nB) + 1);
        }

        if (!b)
            if (sum >= 0 && nA >= sum)
                return nB + 1;

        if (b == 1)
            if (sum >= 0)
                return max((ll) 0, min(sum, nA) + min(sum, nB) - sum + 1);
    }

    return 0;
}

int main()
{
    freopen("plus.in", "r", stdin);
    freopen("plus.out", "w", stdout);

    scanf("%lld", &s);

    scanf("%lld %lld", &nrBile, &val);

    scanf("%lld %lld", &nA, &vA);
    scanf("%lld %lld", &nB, &vB);

    for (ll i = 0; i <= nrBile; i++)
        sol += formeazaSol(s - i * val);

    printf("%lld", sol);

    fclose(stdin);
    fclose(stdout);
    return 0;
}