Cod sursa(job #48321)

Utilizator sdnxptVasiliu Radu sdnxpt Data 4 aprilie 2007 17:43:46
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <string.h>
#define tmax 44101
#define Nmax 50000

typedef int vect[Nmax];

vect an,ap,bn,bp;

int n,m;
int x;
#define li -tmax
#define ls tmax
#define A(i) (((i)<0)?(an[-(i)]):(ap[(i)]))
#define B(i) (((i)<0)?(bn[-(i)]):(bp[(i)]))

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

void afisare()
  {
  FILE * fout=fopen("diamant.out","w");
  fprintf(fout,"%d\n",A(x));
  fclose(fout);
}

void dinamic()
  {
  int i,j,k;
  A(0)=1;
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
      {
      memcpy(bn,an,sizeof(an));
      memcpy(bp,ap,sizeof(ap));
      for(k=ls;k>=li;k--)
        A(k)=(B(k-i*j)+B(k)+B(k+i*j))%10000;
      }
}

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