Pagini recente » Cod sursa (job #2060261) | Cod sursa (job #1481379) | Cod sursa (job #1237832) | Cod sursa (job #90148) | Cod sursa (job #182416)
Cod sursa(job #182416)
#include<fstream.h>
long s;
long luat[44101],luatn[44101];
long rec[44101],recn[44101];
int main()
{
long i,j,m,n,val;
ofstream fout("diamant.out");
ifstream fin("diamant.in");
fin>>n>>m>>val;
fin.close();
long x[1000],dx=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
dx++;
x[dx]=i*j;
s+=x[dx];
}
if(val>s)
{
fout<<0<<'\n';
fout.close();
return 0;
}
int min=0,max=0;
luat[0]=1;
for(i=1;i<=s;i++)
luat[i]=luatn[i]=rec[i]=recn[i]=0;
for(i=1;i<=dx;i++)
{
if(-min>max)
max=-min;
for(j=max;j>=0;j--)
{
if(luat[j]>0)
{
luat[j+x[i]]+=luat[j];
luat[j+x[i]]=luat[j+x[i]]%10000;
rec[j+x[i]]=1;
if(j+x[i]>max)
max=j+x[i];
}
if(luatn[j]>0)
{
if(-j+x[i]>=0)
{
luat[-j+x[i]]+=luatn[j];
luat[-j+x[i]]=luat[-j+x[i]]%10000;
if(max<-j+x[i])
max=-j+x[i];
rec[-j+x[i]]=1;
if(-j+x[i]>max)
max=-j+x[i];
}
else
if(-j+x[i]<0)
{
luatn[j-x[i]]+=luatn[j];
luatn[j-x[i]]=luatn[j-x[i]]%10000;
recn[j-x[i]]=1;
if(-j+x[i]<min)
min=-j+x[i];
}
}
}
for(j=max;j>=0;j--)
{
if(luat[j]>0&&rec[j]==0)
{
if(j-x[i]>=0)
{
luat[j-x[i]]+=luat[j];
luat[j-x[i]]=luat[j-x[i]]%10000;
}
else
{
luatn[x[i]-j]+=luat[j];
luatn[-j+x[i]]=luat[-j+x[i]]%10000;
if(j-x[i]<min)
min=j-x[i];
}
}
else
rec[j]=0;
if(luatn[j]>0&&recn[j]==0)
{
luatn[j+x[i]]+=luatn[j];
luatn[j+x[i]]=luatn[j+x[i]]%10000;
if(-j-x[i]<min)
min=-j-x[i];
}
else
recn[j]=0;
}
}
/*for(i=0;i<=s;i++)
fout<<luat[i]<<" ";*/
fout<<luat[val]<<'\n';
fout.close();
return 0;
}
/* for(i=1;i<=dx;i++)
for(j=s;j>=0;j--)
{
if(luat[j]>0)
{
luat[j+x[i]]=(luat[j+x[i]]+luat[j])%10000;
if(j-x[i]>=0)
luat[j-x[i]]=(luat[j-x[i]]+luat[j])%10000;
else
{
luatn[x[i]-j]=(luatn[x[i]-j]+luat[j])%10000;
recn[x[i]-j]=1;
}
}
if(luatn[j]>0&&recn[j]==0)
{
if(-j+x[i]>=0)
luat[-j+x[i]]=(luat[-j+x[i]]+luatn[j])%10000;
else
luatn[-x[i]+j]=(luatn[-x[i]+j]+luatn[j])%10000;
if(j+x[i]<=s)
luatn[j+x[i]]=(luatn[j+x[i]]+luatn[j])%10000;
}
else
recn[j]=0;
}
*/