Cod sursa(job #873035)

Utilizator soriynSorin Rita soriyn Data 6 februarie 2013 20:31:13
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <queue>
#include <cstdlib>
#define maxn 100020
#define mij 50000
#define mod 10000

int vec[maxn],aux[maxn];
using namespace std;

ifstream in("diamant.in");
ofstream out("diamant.out");

queue<int> q;
int sol;
int n,m,s,maxval,maxi,mini,minval,sol2;


void read()
{

    in>>n>>m>>s;
    if(s>50000){out<<"0";exit(0);}
    vec[mij]=1;
    int maxi=0,mini=0;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
     {

         for(int t=mini;t<=maxi;t++)
         {

             if(vec[mij+t]==0) continue;
             int x=t+i*j;
             int y=t;
             int z=t-i*j;

             if(vec[mij+t]>=mod) vec[mij+t]-=mod;
             if(aux[mij+x]>=mod) aux[mij+x]-=mod;
             if(aux[mij+y]>=mod) aux[mij+y]-=mod;
             if(aux[mij+z]>=mod) aux[mij+z]-=mod;



               aux[mij+x]=aux[mij+x]+vec[mij+t];
               aux[mij+y]=aux[mij+y]+vec[mij+t];
               aux[mij+z]=aux[mij+z]+vec[mij+t];


             if(aux[mij+x]>=mod) aux[mij+x]-=mod;
             if(aux[mij+y]>=mod) aux[mij+y]-=mod;
             if(aux[mij+z]>=mod) aux[mij+z]-=mod;


         }
         for(int p=0;p<=mij+maxi;p++) vec[p]=aux[p],aux[p]=0;
         mini-=i*j,maxi+=i*j;

     }

}
int main()
{
    read();
    out<<vec[s+mij];
    return 0;
}