Pagini recente » Cod sursa (job #3231456) | Cod sursa (job #914608) | Cod sursa (job #1690496) | Cod sursa (job #850175) | Cod sursa (job #48081)
Cod sursa(job #48081)
# include <stdio.h>
const long int MAXX=210*210;
int g[500],n,m,k;long int x;
long int sp_poz[MAXX+1];long int sp_neg[MAXX+1],sp_neg_s[MAXX+1],sp_poz_s[MAXX+1];
long int retrieve(long int val)
{
if (val>MAXX||val<-MAXX) return 0;
if (val>=0) return sp_poz[val];
return sp_neg[-val];
}
void add_safe(long int val, long int retrieve)
{
if (val>=0) sp_poz_s[val]+=retrieve;
else sp_neg_s[-val]+=retrieve;
}
void copy_safe()
{
long int i;
for (i=0;i<=MAXX;i++)
{
sp_neg[i]=sp_neg_s[i];
sp_neg_s[i]=0;
sp_poz[i]=sp_poz_s[i];
sp_poz_s[i]=0;
}
}
void calculeaza()
{
sp_poz[g[1]]=1;sp_neg[g[1]]=1;sp_poz[0]=1;
long int i,val,stance,aux;
for (i=2;i<=n;i++)
{
for (val=10;val>=-10;val--)
for (stance=-1;stance<=1;stance++)
{
aux=retrieve(val-g[i]*stance);
add_safe(val,aux);
}
copy_safe();
}
}
void citire()
{
FILE *f=fopen("diamant.in","r");
fscanf(f,"%d%d%ld",&n,&m,&x);
fclose(f);
}
void creaza_g()
{
int i,j,k=0;
for (i=1;i<=n;i++)
for(j=1;j<=m;j++) g[++k]=i*j;
n=k;
}
void scrie()
{
FILE *g=fopen("diamant.out","w");
fprintf(g,"%ld\n",retrieve(x));
fcloseall();
}
int main()
{
citire();
creaza_g();
calculeaza();
scrie();
return 0;
}