Cod sursa(job #7750)

Utilizator stef2nStefan Istrate stef2n Data 22 ianuarie 2007 12:07:18
Problema 1-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>

#define infile "1-sir.in"
#define outfile "1-sir.out"
#define MOD 194767
#define DECALAJ 32700

FILE *fin,*fout;
int N,S;
int nr[2*32700][2];

void solve()
  {
   int i,j;
   int min=-N*(N-1)/2;
   int max=N*(N-1)/2;
   int current,next;
   int ok;

   current=N%2;
   for(i=min;i<=max;i++)
      nr[i+DECALAJ][0]=nr[i+DECALAJ][1]=0;
   nr[DECALAJ][current]=1;

   for(j=N-1;j>0;j--)
     {
      current=j%2;
      next=(j+1)%2;
      for(i=min;i<=max;i++)
         {
          nr[i+DECALAJ][current]=0;
          ok=1;
          if(i+(N-j)>max)
            ok=0;
          if(ok)
            nr[i+DECALAJ][current]+=nr[i+(N-j)+DECALAJ][next];
          ok=1;
          if(i-(N-j)<min)
            ok=0;
          if(ok)
            nr[i+DECALAJ][current]+=nr[i-(N-j)+DECALAJ][next];
          if(nr[i+DECALAJ][current]>=MOD)
            nr[i+DECALAJ][current]-=MOD;
         }
     }
  }


int main()
{
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&N,&S);
fclose(fin);
if((S>N*(N-1)/2) || (S<-N*(N-1)/2))
  {
   fout=fopen(outfile,"w");
   fprintf(fout,"0\n");
   fclose(fout);
   return 0;
  }
solve();
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",nr[S+DECALAJ][1]);
fclose(fout);
return 0;
}