Cod sursa(job #270294)

Utilizator alex23alexandru andronache alex23 Data 3 martie 2009 21:18:45
Problema Plus Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>

using namespace std;

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

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

long long numar = 0;

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

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

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

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

	if (S == 0)
	{
		fprintf(g, "%d", 1 + v[1] + min(v[0], v[2]) * v[1]);
		fclose(g);
		return 0;
	}

	if (S > 0)
	{
		if (S > v[2])
		{
			fprintf(g, "0");
			fclose(g);
			return 0;
		}

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

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