Cod sursa(job #48298)

Utilizator sdnxptVasiliu Radu sdnxpt Data 4 aprilie 2007 17:28:38
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#define tmax 44101
#define Nmax 50000

typedef int vect[Nmax];

vect an,ap,bn,bp;

int n,m;
long x;
#define li -tmax
#define ls tmax

void citire()
  {
  FILE * fin=fopen("diamant.in","r");
  fscanf(fin,"%d %d %ld",&n,&m,&x);
  fclose(fin);
}

void afisare()
  {
  FILE * fout=fopen("diamant.out","w");
  if(x>=0) fprintf(fout,"%d\n",ap[x]);
  else fprintf(fout,"%d\n",an[x]);
  fclose(fout);
}

void dinamic()
  {
  int i,j,k;
  ap[0]=1;
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
      {
      for(k=li;k<=ls;k++) if(k>=0) bp[k]=ap[k];
                          else bn[-k]=bp[-k];
      for(k=ls;k>=li;k--)
        if(k<0) {
                if(k+i*j>=0) an[-k]=bn[i*j-k]+bn[-k]+bp[k+i*j];
                else an[-k]=bn[i*j-k]+bn[-k]+bn[-k-i*j];
                an[-k]%=10000;
                }
        else {
             if(k-i*j>=0) ap[k]=bp[k-i*j]+bp[k]+bp[k+i*j];
             else ap[k]=bn[i*j-k]+bp[k]+bp[k+i*j];
             ap[k]%=10000;
             }
        }
}

int main()
  {
  citire();
  dinamic();
  afisare();
  return 0;
}