Cod sursa(job #2021569)

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

FILE *fin, *fout;

int r, d;

inline int get(int f, int n) {
	int ans = 0;
	while (n > 0 && n % f == 0)
		ans++, n /= f;
	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;
	for (int j = 0; j < r; j++) {
		if (d == 2) {
			pow2 += get(2, r - j) - get(2, j + 1);
			if (pow2 > 0)
				ans++;
			else pow2 = 0;
		}
		if (d == 3) {
			pow3 += get(3, r - j) - get(3, j + 1);
			if (pow3 > 0)
				ans++;
			else
				pow3 = 0;
		}
		if (d == 4) {
			pow2 += get(2, r - j) - get(2, j + 1);
			if (pow2 > 1)
				ans++;
			else
				pow2 = std::max(pow2, 0);
		}
		if (d == 5) {
			pow5 += get(5, r - j) - get(5, j + 1);
			if (pow5 > 0)
				ans++;
			else
				pow5 = 0;
		}
		if (d == 6) {
			pow2 += get(2, r - j) - get(2, j + 1);
			pow3 += get(3, r - j) - get(3, j + 1);
			if (pow2 > 0 && pow3 > 0)
				ans++;
			else pow2 = std::max(pow2, 0), pow3 = std::max(pow3, 0);
		}
	}
	fprintf(fout, "%d", ans);
	fclose(fin);
	fclose(fout);
	return 0;
}