Cod sursa(job #1853776)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 22 ianuarie 2017 00:54:29
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
#define MaxS 50000
#define MaxN 20
#define Mod 10000
using namespace std;

FILE *IN,*OUT;

int N,M,X,Size=0,v[MaxN*MaxN+5],Sum=0,D[2][2*MaxS];
int main()
{
    IN=fopen("diamant.in","r");
    OUT=fopen("diamant.out","w");

	fscanf(IN,"%d%d%d",&N,&M,&X);
	D[0][MaxS]=1;
	if(abs(X)>MaxS)
	{
		fprintf(OUT,"0");
		return 0;
	}
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
			v[++Size]=i*j;
	for(int i=1;i<=Size;i++)
	{
		Sum+=v[i];
		for(int j=MaxS-Sum;j<=MaxS+Sum;j++)
			D[i%2][j]=(D[(i+1)%2][j]+D[(i+1)%2][j-v[i]]+D[(i+1)%2][j+v[i]])%Mod;
	}
	fprintf(OUT,"%d",D[Size%2][X+MaxS]);
	return 0;
}