Cod sursa(job #2967341)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 19 ianuarie 2023 13:56:23
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<iostream>
#include<fstream>
using namespace std;

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

int dp[2][88444],n,m;
long long x;

void citire()
{
 	f>>n>>m>>x;
}

void solve()
{
   	int summax = 0,sum = 0;
   	int ma,mi;
   	for(int i=1;i<=n;i++)
      	for(int j=1;j<=m;j++)
        	summax = summax + i * j;
    if(summax < abs(x))
    {
        g<<"0";
        return;
    }
	int casute = 0;
	dp[0][44200] = 1;
	for(int i=1;i<=n;i++)
   	{
   		for(int j=1;j<=m;j++)
       {
			sum = i * j;   
          	summax = summax - sum;
        	ma = max(-44200 * 1LL + summax,x-summax);
			mi = min(44200 * 1LL - summax, x + summax);
		    casute = casute ^ 1;
			for(int k = ma; k<= mi;k++)
			{
				dp[casute][k + 44200] = dp[casute ^ 1][k + 44200];
				dp[casute][k + 44200] += dp[casute^1][k - sum + 44200];
				dp[casute][k + 44200] += dp[casute^1][k + sum + 44200];
				dp[casute][k + 44200] = dp[casute][k + 44200] % 10000;
			}  
       }
   	}
   	g<<dp[casute][44200 + x];
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
   	citire();
   	solve();
}