Cod sursa(job #270491)

Utilizator alex23alexandru andronache alex23 Data 4 martie 2009 08:18:54
Problema Plus Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <iostream>

using namespace std;

FILE *f = fopen("plus.in", "r"), *g = fopen("plus.out", "w");

long long S, N1, N2, N3, B1, B2, B3, v[3];

long long numar = 0;

long long min(long long a, long long b)
{
	if (a < b)
		return a;
	return b;
}

int main()
{
	v[0] = v[1] = v[2] = 0;

	fscanf(f, "%lld\n", &S);
	fscanf(f, "%lld %lld", &N1, &B1);
	fscanf(f, "%lld %lld", &N2, &B2);
	fscanf(f, "%lld %lld", &N3, &B3);
	fclose(f);
	
	switch (B1) {
		case -1 : v[0] += N1; break;
		case 0 : v[1] += N1; break;
		case 1 : v[2] += N1; break;
	};

	switch (B2) {
		case -1 : v[0] += N2; break;
		case 0 : v[1] += N2; break;
		case 1 : v[2] += N2; break;
	};

	switch (B3) {
		case -1 : v[0] += N3; break;
		case 0 : v[1] += N3; break;
		case 1 : v[2] += N3; break;
	};

	

	if (S == 0)
	{
		if (v[0] < v[2])
		{
			numar = 1 + v[1] + v[0] * (1 + v[1]);
		}
		else
		{
			numar = 1 + v[1] + v[2] * (1 + v[1]);
		}
		fprintf(g, "%lld\n", numar);
		fclose(g);
		return 0;
	}

	if (S > 0)
	{
		if (S > v[2])
		{
			fprintf(g, "0\n");
			fclose(g);
			return 0;
		}
		/*
		long long x = 0;
		while ((v[2] - x >= S) && (x <= v[0]) && (v[2] - x >= 0))
		{
			numar = numar + (1 + v[1]);
			x++;
		}
		*/
		long long i = S, j = 0;
		while ((i <= v[2]) && (j <= v[0]))
		{
			numar = numar + 1 + v[1];
			++i;
			++j;
		}
		fprintf(g, "%lld\n", numar);
		fclose(g);
		return 0;
	}

	S = -S;
	if (S > v[0])
	{
		fprintf(g, "0\n");
		fclose(g);
		return 0;
	}

	long long x = 0;
	while ((v[0] - x >= S) && (x <= v[2]) && (v[0] - x >= 0))
	{
		numar = numar + (1 + v[1]);
		++x;
	}
	fprintf(g, "%lld\n", numar);
	fclose(g);
	return 0;
}