Cod sursa(job #1223343)

Utilizator ion824Ion Ureche ion824 Data 28 august 2014 00:28:39
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<iostream>
const int V = 44100;
const int MOD = 10000;
int A[88210], B[88210];

#define A (A + 44100)
#define B (B + 44100)
#define viz (viz + 44100)
using namespace std;

int main(){
	ifstream cin("diamant.in");
	ofstream cout("diamant.out");
	int N,M,X,i,j,val,t,k2,x;
	int *a=A, *b=B;
	
	cin >> N >> M >> X;
	
	if(X > V || X < - V)
	{
		cout << "0\n";
		return 0; 
	}

	b[0] = 1; 
	int line = 0, lim;
	int mx,mx2;
	
	for(i=1;i<=N;++i)
	  for(j=1;j<=M;++j)
	  {
	  	val = i*j;
	  	if(val > mx) mx = val;
	  	++line;
	  	lim = min(V,mx+val);
	  	for(t=max(-V,-mx-val); t<=lim;++t)
	  	{
	  		if(t + val >= mx2) mx2 = t + val;
	  		a[t] = b[t];
	  		
	  		if(t + val <= V) a[t] = (a[t] + b[t+val]) % MOD;
	  		if(t - val >= -V) a[t] = (a[t] + b[t-val]) % MOD;
	  	}
		mx = mx2;  
		swap(a,b); 
	  }
	
	cout << b[X] << '\n';
 	
	return 0;
}