Cod sursa(job #1073701)

Utilizator apopeid14Apopei Daniel apopeid14 Data 6 ianuarie 2014 18:54:21
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
#define dim 5000005
FILE*f = fopen("pascal.in", "r");
FILE*g = fopen("pascal.out", "w");
int  v2[dim], v3[dim];
char div2[dim], div3[dim];
int main() {
	int r, d;
	fscanf(f, "%d%d", &r, &d);
	if (d <6)
	{
		int r2 = 1;
		if (d == 4)
		{
			r2 = 2;
			d = 2;
		}
			
		for (register int i = 1; i <= r + 1; i++)
		{
			if (!(i%d))
				div2[i] = div2[i / d] + 1;
			v2[i] = v2[i - 1] + div2[i];
		}
		
		
		int i, nr = 0;
		int n = (r + 1) >> 1;
		for (i = 1; i < n; i++)
		if (v2[r] - v2[r - i] - v2[i] >= r2)
			nr++;
		nr <<= 1;
		if (!(r & 1))
			if (v2[r] - v2[r - i] - v2[i] >= r2)
				nr++;

		fprintf(g, "%d", nr);
	}
	else
	{
		for (register int i = 1; i <= r + 1; i++)
		{
			if (!(i&1))
				div2[i] = div2[i >> 1] + 1;
			if (!(i%3))
				div3[i] = div3[i / 3] + 1;
			v2[i] = v2[i - 1] + div2[i];
			v3[i] = v3[i - 1] + div3[i];
		}
		int r2 = 0, r3 = 0;
		
		r2 = 1;
		r3 = 1;
		
		int i, nr = 0;
		int n = (r + 1) >> 1;
		for (i = 1; i < n; i++)
		if (v2[r] - v2[r - i] - v2[i] >= r2&&v3[r] - v3[r - i] - v3[i] >= r3)
			nr++;
		nr <<= 1;
		if (!(r & 1))
			if (v2[r] - v2[r - i] - v2[i] >= r2&&v3[r] - v3[r - i] - v3[i] >= r3)
				nr++;

		fprintf(g, "%d", nr);
	}

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