Cod sursa(job #2021576)

Utilizator mihai.alphamihai craciun mihai.alpha Data 13 septembrie 2017 22:44:02
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>

FILE *fin, *fout;

int r, d;

inline int get2(int n) {
	int ans = 0;
	while (n > 0 && !(n & 1))
		ans++, n >>= 1;
	return ans;
}

inline int get3(int n) {
	int ans = 0;
	while (n > 0 && !(n % 3))
		ans++, n /= 3;
	return ans;
}

inline int get5(int n) {
	int ans = 0;
	while (n > 0 && !(n % 5))
		ans++, n /= 5;
	return ans;
}

int main() {
	fin = fopen("pascal.in", "r");
	fout = fopen("pascal.out", "w");
	fscanf(fin, "%d%d", &r, &d);
	int ans = 0, pow2 = 0, pow3 = 0, pow5 = 0;
	if (d == 2) {
		for (int j = 0; j < r; j++) {
			pow2 += get2(r - j) - get2(j + 1);
			if (pow2 > 0)
				ans++;
		}
	}
	if (d == 3) {
		for (int j = 0; j < r; j++) {
			pow3 += get3(r - j) - get3(j + 1);
			if (pow3 > 0)
				ans++;
		}
	}
	if (d == 4) {
		for (int j = 0; j < r; j++) {
			pow2 += get2(r - j) - get2(j + 1);
			if (pow2 > 1)
				ans++;
		}
	}
	if (d == 5) {
		for (int j = 0; j < r; j++) {
			pow5 += get5(r - j) - get5(j + 1);
			if (pow5 > 0)
				ans++;
		}
	}
	if (d == 6) {
		for (int j = 0; j < r; j++) {
			pow2 += get2(r - j) - get2(j + 1);
			pow3 += get3(r - j) - get3(j + 1);
			if (pow2 > 0 && pow3 > 0)
				ans++;
		}
	}
	fprintf(fout, "%d", ans);
	fclose(fin);
	fclose(fout);
	return 0;
}