Cod sursa(job #1774847)

Utilizator nnnmmmcioltan alex nnnmmm Data 9 octombrie 2016 15:21:25
Problema Diamant Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#include<cstring>
const int SMAX=50000,SMIN=-50000,MOD=10000;
int d[5][1<<16];
int Get_a(int a,int poz)
{
 if(poz>=0)
    return a;
 return a+1;
}
int Get_poz(int a,int poz)
{
 if(poz>=0)
    return poz;
 return -poz;
}
int main()
{
 FILE *in=fopen("diamant.in","r");
 int n,m,x;
 fscanf(in,"%d %d %d ",&n,&m,&x);
 fclose(in);
 FILE *out=fopen("diamant.out","w");
 if(x>SMAX)
    {
     fprintf(out,"%d\n",0);
     fclose(out);
     return 0;
    }
 d[1][0]=1;
 for(int i=1;i<=n;i++)
     {
      for(int j=1;j<=m;j++)
          {
           memcpy(d[3],d[1],sizeof d[1]);
           memcpy(d[4],d[2],sizeof d[2]);
           for(int s=SMAX;s>=SMIN;s--)
               {
                d[Get_a(1,s)][Get_poz(1,s)]=d[Get_a(3,s-i*j)][Get_poz(3,s-i*j)]+d[Get_a(3,s)][Get_poz(3,s)]+d[Get_a(3,s+i*j)][Get_poz(3,s+i*j)];
                d[Get_a(1,s)][Get_poz(1,s)]%=MOD;
               }
          }
     }
 fprintf(out,"%d\n",d[1][Get_poz(1,x)]);
 fclose(out);
 return 0;
}