Pagini recente » Cod sursa (job #2856280) | Cod sursa (job #3136034) | Cod sursa (job #768525) | Cod sursa (job #3151970) | Cod sursa (job #1901310)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
int pls[2][50105],cost[1001],mns[2][50000];
const int mod=10000;
int main()
{
int n,m,x,i,j;
fin>>n>>m>>x;
int rez=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
rez+=i*j;
cost[(i-1)*n+j]=i*j;
}
}
pls[0][0]=mns[0][0]=1;
int tot=n*m;
int ct,ant;
for(i=1;i<=tot;i++)
{
ct=i&1;
ant=(i+1)&1;
for(j=0;j<=rez;j++)
{
pls[ct][j]=pls[ant][j];
mns[ct][j]=mns[ant][j];
pls[ct][j]=(pls[ct][j]+pls[ant][j+cost[i]])%mod;
mns[ct][j]=(mns[ct][j]+mns[ant][j+cost[i]])%mod;
if(j>=cost[i]) pls[ct][j]=(pls[ct][j]+pls[ant][j-cost[i]])%mod;
else if(j<cost[i]) pls[ct][j]=(pls[ct][j]+mns[ant][cost[i]-j])%mod;
if(j>=cost[i]) mns[ct][j]=(mns[ct][j]+mns[ant][j-cost[i]])%mod;
else if(j<cost[i]) mns[ct][j]=(mns[ct][j]+pls[ant][cost[i]-j])%mod;
}
}
if(x>0 && x>rez) fout<<"0";
else if(x<0 && -x >rez) fout<<"0";
else
{
ct=tot&1;
if(x>0) fout<<pls[ct][x];
else fout<<mns[ct][-x];
}
}