Cod sursa(job #2836159)

Utilizator luiz_felipeLuiz Felipe luiz_felipe Data 19 ianuarie 2022 20:53:25
Problema Pascal Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
using namespace std;
const int dim = 5000003;
int p1[dim], p2[dim];
int d, ans, i, n, j;
ifstream f("pascal.in");
ofstream g("pascal.out");
inline void calcul(const int val, int v[]);

int main()
{
	f >> n >> d;
	switch (d)
	{
	case 2:
		calcul(d, p1);
		for (i = 1; i < n; ++i)
			if (p1[n] - p1[i] - p1[n - i]) ++ans;
		break;
	case 3:
		calcul(d, p1);
		for (i = 1; i < n; ++i)
			if (p1[n] - p1[i] - p1[n - i]) ++ans;
		break;
	case 5:
		calcul(d, p1);
		for (i = 1; i < n; ++i)
			if (p1[n] - p1[i] - p1[n - i]) ++ans;
		break;
	case 4:
		calcul(2, p1);
		for (i = 1; i < n; ++i)
			if (p1[n] - p1[i] - p1[n - i] > 1) ++ans;
		break;
	default:
		calcul(2, p1);
		calcul(3, p2);
		for (i = 1; i < n; ++i)
			if (p1[n] - p1[i] - p1[n - i] && p2[n] - p2[i] - p2[n - i]) ++ans;
		break;
	}
	g << ans;
}

inline void calcul(const int val, int v[])
{
	v[0] = 0;
	for (i = val; i <= n; i *= val)
		for (j = i; j <= n; j += i) ++v[j];
	for (i = 1; i <= n; ++i) v[i] += v[i - 1];
}