Cod sursa(job #1067926)

Utilizator Robert29FMI Tilica Robert Robert29 Data 27 decembrie 2013 17:50:10
Problema Pascal Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
FILE*f = fopen("pascal.in", "r");
FILE*g = fopen("pascal.out", "w");
int  v[6][5000005];
int r[6];
int R, d;
int fact(int a, int b){
	int z = 0;
	while (a%b == 0){
		a /= b;
		z++;
	}
	return z;
}
void rezolva(int a, int b)
{
	for (register int i = 1; i <= R + 1; i++)
	{
		v[a][i] = v[a][i - 1] + fact(i, a);
		v[b][i] = v[b][i - 1] + fact(i, b);
	}
	int i, nr = 0;
	int n = (R + 1) >> 1;
	for (i = 1; i < n; i++)
	if (v[a][R] - v[a][R - i] - v[a][i] >= r[a]&&v[b][R] - v[b][R - i] - v[b][i] >= r[b])
		nr++;
	nr *= 2;
	if (R % 2 == 0)
	if (v[a][R] - v[a][R - i] - v[a][i] >= r[a]&&v[b][R] - v[b][R - i] - v[b][i] >= r[b])
		nr++;

	fprintf(g, "%d", nr);
}
int main() {
	
	fscanf(f, "%d%d", &R, &d);
	if (d == 2)
	{
		r[2] = 1;
		rezolva(2, 5);
	}
	else if (d == 3)
	{
		r[3] = 1;
		rezolva(3, 5);
	}
	else if (d == 4)
	{
		r[2] = 2;
		rezolva(2, 5);
	}
	else if (d == 5)
	{
		r[5] = 1;
		rezolva(3, 5);
	}
	else{
		r[2] = 1;
		r[3] = 1;
		rezolva(2, 3);
	}
	

	fclose(f);
	fclose(g);
	return 0;
}