Cod sursa(job #2064236)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 12 noiembrie 2017 00:06:41
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <algorithm>

using namespace std;

FILE *fin = fopen("plus.in", "r"), *fout = fopen("plus.out", "w");

#define ll long long

inline ll f(int s, int na, int a, int nb, int b) {
    if (a > b) {
        swap(a, b);
        swap(na, nb);
    }
    if (a == -1) {
        if (b == -1) {
            if (-s > na + nb) return 0;
            return max(0, 1 + min(na, -s) + min(nb, -s) + s);
        } else if (b == 0) return (nb + 1) * (s <= 0 && -s <= na);
        else {
            if (s < 0) na -= -s;
            else nb -= s;
            return max(0, 1 + min(na, nb));
        }
    } else if (a == 0) {
        if (b == 0) return 1LL * (na + 1) * (nb + 1) * (s == 0);
        else return (na + 1) * (s >= 0 && s <= nb);
    } else {
        if (s > na + nb) return 0;
        else return max(0, 1 + min(na, s) + min(nb, s) - s);
    }
}

int main() {
    int s, na, a, nb, b, nc, c;
    fscanf(fin, "%d%d%d%d%d%d%d", &s, &na, &a, &nb, &b, &nc, &c);

    ll ans = 0;
    for (int i = 0; i <= na; i++)
        ans += f(s - i * a, nb, b, nc, c);

    fprintf(fout, "%lld\n", ans);

    fclose(fin);
    fclose(fout);
    return 0;
}