Cod sursa(job #736775)

Utilizator robertpoeRobert Poenaru robertpoe Data 19 aprilie 2012 11:21:51
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#define DN 45005
#define MOD 10000
using namespace std;
int p[DN],q[DN];
int main()
{
    int n,m,s,smax=0;
    ifstream f("diamant.in");
    ofstream g("diamant.out");
    f>>n>>m>>s;
    for(int i=1; i<=n; ++i) 
		for(int j=1; j<=m; ++j)
			smax+=i*j;
	if(s>smax || s<-smax) 
	{
		g<<"0"; 
		return 0;
	}
    q[0]=q[1]=1;
    for(int i=1; i<=n; ++i) 
		for(int j=1; j<=m; ++j)
			if(1!=i || 1!=j)
			{
				for(int k=0; k<=smax; ++k)
					p[k]=q[k];
				for(int k=0; k<=smax; ++k)
				{
					if(i*j<=k) 
						q[k]=p[k]+q[k+i*j]+p[k-i*j];
					else 
						q[k]=p[k]+q[k+i*j]+p[i*j-k];
					q[k]%=MOD;
				}
			}
	if(0<s) 
		g<<q[s];
	else 
		g<<q[-s];
    return 0;
}