Cod sursa(job #741503)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 26 aprilie 2012 10:59:15
Problema Diamant Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <cstring>
using namespace std;

int n,m;
int mx;

int P=1,Q,X,nrr=401*401-1;
int dp[2][2*401*401];
int main()
{
	ifstream in("diamant.in");
	ofstream out("diamant.out");
	
	in>>n>>m>>X;
	mx=(n*(n+1)/2)*(m*(m+1)/2)*2;
	
	dp[Q][nrr]=1;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			int nr=i*j;
			for(int k=-mx;k<=mx;++k)
			{
				dp[P][k+nr+nrr]+=dp[Q][k+nrr];
				dp[P][k-nr+nrr]+=dp[Q][k+nrr];
				dp[P][k+nrr]+=dp[Q][k+nrr];
				dp[P][k+nr+nrr]%=10000;
				dp[P][k-nr+nrr]%=10000;
				dp[P][k+nrr]%=10000;
			}
			memset(dp[Q],0,sizeof(dp[Q]));
			P^=Q^=P^=Q;
		}
	}
	
	if(X>mx || X<-mx)
	{
		out<<"0\n";
	}
	else
	{
		out<<dp[Q][X+nrr]<<'\n';
	}
	
	out.close();
	return 0;
}