Cod sursa(job #2520850)

Utilizator hurjui12AlexandruHurjui Alexandru-Mihai hurjui12Alexandru Data 9 ianuarie 2020 20:30:36
Problema Diamant Scor 30
Compilator cpp-64 Status done
Runda UltraDP (si altele) Marime 0.96 kb
#include <fstream>
using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");

const int r = 10000;
const int c = 50000;

//rezmax = 44100

inline int max(int a, int b)
{
	if (a > b)
		return a;
	return b;
}

inline int min(int a, int b)
{
	if (a < b)
		return a;
	return b;
}

int main()
{
	int n, m, x, i, j, l, rasp = 0;
	int a[401], k = 0;
	int dp[2][100001] = {};
	//dp[i] = numarul de diamante de calitate i;
	fin >> n >> m >> x;
	if (abs(x) > 44100)
	{
		fout << 0;
		return 0;
	}
	x = abs(x);
	for (i = 1; i<=n; i++)
		for (j = 1; j<=m; j++)
		{
			k++;
			a[k] = i*j;
		}
	l = 0;
	/*
	for (i = -x; i<=x; i++)
		fout << i << ' ';
		*/
	for (i = 1; i<=k; i++, l = 1-l)
	{
		for (j = min(-x, -n*m); j<=max(x, n*m); j++)
		{
			dp[l][c+j] = (dp[1-l][c+j] + dp[1-l][c+j-a[i]] + dp[1-l][c+j+a[i]])%r;
			//fout << dp[l][c+j] << "  ";
		}
		//fout << '\n';
		dp[l][c+a[i]]++;
		dp[l][c-a[i]]++;
		rasp = (rasp + dp[l][c+x])%r;
	}
	fout << rasp;
	return 0;
}