Cod sursa(job #917975)

Utilizator stefanzzzStefan Popa stefanzzz Data 18 martie 2013 15:25:24
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <vector>
#define MAXX 44105
#define NRM 10000
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");

int n,m,x,uz[2][2*MAXX],uzv[2*MAXX],p,sz;
bool act=0;
vector<int> v;

int main()
{
    int i,j,k;
    f>>n>>m>>x;
    x+=MAXX;
    v.push_back(MAXX);
    uzv[MAXX]=1;
    uz[1][MAXX]++;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++){
            for(k=0;k<v.size();k++)
                uz[act][v[k]]=uz[1-act][v[k]];
            p=i*j;
            sz=v.size();
            for(k=0;k<sz;k++){
                uz[act][v[k]+p]+=uz[1-act][v[k]];
                uz[act][v[k]-p]+=uz[1-act][v[k]];
                if(!uzv[v[k]+p]){
                    uzv[v[k]+p]=1;
                    v.push_back(v[k]+p);}
                if(!uzv[v[k]-p]){
                    uzv[v[k]-p]=1;
                    v.push_back(v[k]-p);}}
            for(k=0;k<v.size();k++)
                uz[act][v[k]]%=NRM;
            act=1-act;}
    if(x>=2*MAXX||x<0){
        g<<"0\n";
        return 0;}
    g<<uz[1-act][x]<<'\n';
    return 0;
}