Pagini recente » Monitorul de evaluare | Cod sursa (job #518514) | Cod sursa (job #2073899) | Cod sursa (job #428867) | Cod sursa (job #2064232)
#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(-s, min(na, nb)));
} 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 (nb + 1) * (s >= 0 && s <= nb);
} else {
if (s > na + nb) return 0;
else return max(0, 1 + min(s, min(na, nb)));
}
}
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;
}