Cod sursa(job #1920549)

Utilizator RalucaIosubIosub Raluca Nicoleta RalucaIosub Data 10 martie 2017 08:09:51
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb

#include<fstream>
using namespace std;
typedef int BIG[500];
int n,d,m,i,j,k,r,q,aux;
BIG Lc[501],Lp[501];
ifstream f("expozitie.in");
ofstream g("expozitie.out");


void sum(BIG a, BIG b, BIG &s)//suma a 2 numere mari, s=a+b
{
    //a[0]=nr cifrelor lui a
    //b[0]=nr cifrelor lui b
    int i,cifra,t = 0,max;
    if(a[0]<b[0])
	 {
		max=b[0];
	  	for(i=a[0]+1;i<=b[0];i++) a[i]=0;//lungim vectorul a adaugand 0
	 }
    else
       {
	     max=a[0];
	    for(i=b[0]+1;i<=a[0];i++)  b[i]=0; //lungim vectorul b adaugand 0
	 }

    for(i=1;i<=max;i++)
    {
      cifra=a[i]+b[i]+t; s[i]=cifra%10; t=cifra/10;   //facem adunarea, t=depasirea
    }
    if(t) s[i]=t;
    else i--;
    s[0]=i;

}
int main()
{
	f>>n>>d>>k;
	r=n-k*d;
	if(r<0)g<<0;
	else
	if(r==0)g<<1;
	else
	{
	m=r+d-1;
	for(i=1;i<=r;i++) Lp[i][0]=Lp[i][1]=1;
	for(i=2;i<=d;i++)
	{
		aux=i;Lc[1][0]=0;
		while(aux)
		    {
			Lc[1][0]++;
			Lc[1][Lc[1][0]]=aux%10;
			aux=aux/10;
		    }
		for(j=2;j<=r;j++)
			sum(Lp[j],Lc[j-1],Lc[j]);
		for(j=0;j<=r;j++)
			for(q=0;q<=Lc[j][0];q++)
				Lp[j][q]=Lc[j][q];
	}
	for(j=Lc[r][0];j>=1;j--) g<<Lc[r][j];
	}
	f.close();g.close();
	return 0;
}