Cod sursa(job #1873934)

Utilizator sucureiSucureiRobert sucurei Data 9 februarie 2017 15:24:33
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <algorithm>

#define lint long long int
using namespace std;

lint solve(int S, int valA, int A, int valB, int B) {
    if (valB < valA) {
        swap(valA, valB);
        swap(A, B);
    }

    if (valA == 0 && valB == 0) {
        if (S == 0)
            return 1LL * (A + 1) * (B + 1);
        else
            return 0;
    }
    else if (valA == 0 && valB == 1) {
        if (0 <= S && S <= B)
            return (A + 1);
        else
            return 0;
    }
    else if (valA == -1 && valB == -1)
        return max(0, min(B, -S) - max(0, -A - S) + 1);
    else if (valA == -1 && valB == 0) {
        if (-A <= S && S <= 0)
            return (B + 1);
        else
            return 0;
    }
    else if (valA == -1 && valB == 1)
        return max(0, min(A, B - S) - max(0, -S) + 1);
    else if (valA == 1 && valB == 1)
        return max(0, min(B, S) - max(0, S - A) + 1);
}

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

    int S;

    int A, valA;
    int B, valB;
    int C, valC;

    cin >> S;
    cin >> A >> valA;
    cin >> B >> valB;
    cin >> C >> valC;

    lint ans = 0;
    for (int i = 0; i <= C; ++ i)
        ans += solve(S - i * valC, valA, A, valB, B);

    cout << ans << '\n';
    return 0;
}