Cod sursa(job #752264)

Utilizator ChallengeMurtaza Alexandru Challenge Data 28 mai 2012 11:10:03
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <cstring>

using namespace std;

const char InFile[]="diamant.in";
const char OutFile[]="diamant.out";
const int MaxS=401*401;
const int MOD=10000;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,M,K,SMAX,buffer1[MaxS],buffer2[MaxS];
int *line1=buffer1,*line2=buffer2;

inline int myabs(const int &x)
{
	if(x<0)
	{
		return -x;
	}
	return x;
}

int main()
{
	fin>>N>>M>>K;
	fin.close();
	
	for(register int i=1;i<=N;++i)
	{
		for(register int j=1;j<=M;++j)
		{
			SMAX+=i*j;
		}
	}
	
	if(-SMAX<=K && K<=SMAX)
	{
		line1[0]=1;
		for(register int i=1;i<=N;++i)
		{
			for(register int j=1;j<=M;++j)
			{
				int curr=i*j;
				for(register int k=0;k<=SMAX;++k)
				{
					if(k+curr<=SMAX)
					{
						line2[k]+=line1[k+curr];
					}
					line2[k]+=line1[k];
					if(myabs(k-curr)<=SMAX)
					{
						line2[k]+=line1[myabs(k-curr)];
					}
					line2[k]%=MOD;
				}
				swap(line1,line2);
				memset(line2,0,sizeof(int)*MaxS);
			}
		}
		fout<<line1[myabs(K)];
	}
	else
	{
		fout<<"0";
	}
	fout.close();
	return 0;
}