Cod sursa(job #493656)

Utilizator robigiirimias robert robigi Data 18 octombrie 2010 21:54:35
Problema Plus Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
// Plus.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "cstdio"
#include "cstdlib"

using namespace std;

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

int s;

typedef struct bile
{
	int nr, n;
};

bile v[4];

int rez=1;
	

void read()
{
	fscanf(f, "%d", &s);
	for (int i=1; i<=3; ++i)
	{
		fscanf(f, "%d%d", &v[i].nr, &v[i].n);		
	}	
}

int minim(int x, int y)
{
	if (x<y) return x;
	return y;
}

int maxim(int x, int y)
{
	if (x>y) return x;
	return y;
}

void solve()
{
	long long sol=0;
	for (int i=0; i<=v[1].nr; ++i)
	{
		int cs=s-i*v[1].n;
		if (v[2].n==0)
		{
			if (v[3].n==0)
			{
				if (cs==0)
					sol+=(v[2].nr+1)*(v[3].nr+1);
			}
			else
			{
				if (abs(cs)<=abs(v[3].nr*v[3].n)  && cs*v[3].n>=0)
					sol+=v[2].nr+1;
			}
		}
		else
		{
			if (v[3].n==0)
			{
				if (abs(cs)<=abs(v[2].nr*v[2].n) && cs*v[2].n>=0)
					sol+=v[3].nr+1;
			}
			else
			{
				if (v[2].n==1 && v[3].n==1)
				{
					if (v[2].nr+v[3].nr>cs && cs>=0)
						sol+=cs+1;
				}
				else
					if (v[2].n==-1 && v[3].n==-1)
					{
						if (v[2].nr+v[3].nr<cs && cs<=0)
							sol+=abs(cs)+1;
					}
					else
					{
						if (cs<0)
						{
							if (v[2].n==-1)
							{
								if (v[2].nr<cs)
									sol+=cs-v[2].nr+1;
							}
							else
								if (v[3].nr<cs)
									sol+=cs-v[3].nr+1;
						}
						else
						{
							if (v[2].n==1)
							{
								if (v[2].nr>cs)
									sol+=v[2].nr+1;
							}
							else
								if (v[3].nr>cs)
									sol+=v[3].nr-cs+1;
						}
					}


			}
		}
	}
	fprintf(g, "%lld", sol);
}


int main()
{
	read();
	solve();
	
	fclose(f);
	fclose(g);
	return 0;
}