Cod sursa(job #956296)

Utilizator classiusCobuz Andrei classius Data 2 iunie 2013 19:11:00
Problema Diamant Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;
ifstream f("diamante.in");
ofstream g("diamante.out");

const int mod=10000;
const int mx=50000;

int main()
{
    int n,m,x;

    f>>n>>m>>x;

    vector<int> v;
    int s=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            s+=i*j;
            v.push_back(i*j);
        }

    if(abs(x)>s){
        g<<0;
        return 0;
    }

    vector<long long> u(2*mx+1,0);
    vector<long long> ax(2*mx+1,0);
    u[mx]=1;

    for(size_t i=0;i<v.size();i++){

        for(size_t j=v[i];j<2*mx+1;j++)
            ax[j]+=u[j-v[i]];

        for(size_t j=0;j<2*mx+1-v[i];j++)
            ax[j]+=u[j+v[i]];

        for(size_t j=0;j<2*mx+1;j++){
            u[j]+=ax[j];
            ax[j]=0;
            while(u[j]>=mod)
                u[j]-=mod;
        }
    }

    g<<u[mx+x];

    return 0;
}