Cod sursa(job #660592)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 13 ianuarie 2012 11:14:42
Problema Pascal Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<iostream>
#include<fstream>
using namespace std;
int ok( int d, long long  w[])
{
	if (d==4) return w[2]>1;
	if (d==6) return w[2]>0 && w[3]>0;
	return w[d]>0;
}
	
void desc(int n, long long x[])
{
	int i;
	for (i=2;i<=5;i++)
		if (i!=4)
		{
			long long  y=i;
			while (n/y>0)
			{
				x[i]=x[i]+int (n/y);
				y*=y;
			}
		}
}
void adunare_v ( long long b[], long long  c[], long long a[])
{
	int i;
	for (i=2;i<=5;i++)
		if (i!=4)
			b[i]=a[i]-b[i]-c[i];
}
int main(void)
{
	long long  n,d,nr=0,i;
	fstream f,g;
	f.open("pascal.in",ios::in);
	g.open("pascal.out",ios::out);
	f>>n>>d;
	long long  a[7]={0};
	desc (n,a);
	if (n==0 || n==1)
		{
			g<<0;
			return 0;
		}
	
	for (i=1;i<=n/2;i++)// !! par sau impar
	{
		long long w[7]={0},y[7]={0};
		desc(n-i,w);
		desc(i,y);
		adunare_v(w,y,a);
		if (ok(d,w))
			nr+=2;
	}
	if (n%2==0)
		nr--;
	g<<nr;
}