Cod sursa(job #3153826)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 1 octombrie 2023 14:19:41
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <map>
#define pb push_back
#define int long long
using namespace std;
ifstream cin("diamant.in");
ofstream cout("diamant.out");
using pii = pair<int,int>;
const int mod = 1e4;
const int add = 44100;
int dp[2][100001];
int n , m , x;
signed main()
{
    cin >> n >> m >> x;
    int d = 0;
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= m ; j++) d += i*j;
    }
    int h = d*2;
    int cnt = 0;
    dp[0][d] = 1;
    for(int i = 1 ; i <= n ; ++i)
    {
        for(int j = 1 ; j <= m ; ++j)
        {
            ++cnt;
            int p = (cnt&1);
            for(int l = 0 ; l <= h ; ++l)
            {
                dp[p][l] = dp[1-p][l];
            }
            for(int l = 0 ; l <= h-i*j ; ++l)
            {
                dp[p][l+i*j] = (dp[p][l+i*j] + dp[1-p][l])%mod;
            }
            for(int l = i*j ; l <= h ; ++l)
            {
                dp[p][l-i*j] = (dp[p][l-i*j] + dp[1-p][l])%mod;
            }
        }
    }
    if(x+d<0||x+d>h)
    {
        cout << 0;
        return 0;
    }
    cout << dp[cnt&1][x+d];
    return 0;
}