Cod sursa(job #369601)

Utilizator ProtomanAndrei Purice Protoman Data 28 noiembrie 2009 20:30:51
Problema Plus Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
		
		if (!vB)
			if (!sum)
				return nA * nB;

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

	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;

		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 (int i = 0; i <= nrBile; i++)
		sol += formeazaSol(s - i * val);

	printf("%lld", sol);

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