Pagini recente » Cod sursa (job #2071155) | Cod sursa (job #1345451) | Cod sursa (job #2453182) | Cod sursa (job #2946771) | Cod sursa (job #134149)
Cod sursa(job #134149)
#include<stdio.h>
long int n,k,i,j,poz,nv,ll;
long long int p,s[35][35],sol;
char sc[35],uc;
long long int ss(long int le,long int lp);
void numar();
int main()
{
FILE *f,*g;f=fopen("expresii2.in","r");g=fopen("expresii2.out","w");
fscanf(f,"%ld%ld%lld",&n,&k,&p);
s[0][0]=0;
s[1][1]=0;
s[1][0]=k;
s[2][2]=0;
s[2][1]=1;
s[2][0]=k;
s[3][3]=0;
s[3][2]=2;
s[3][1]=2*k+1;
s[3][0]=k*s[3][1];
for(i=4;i<=n;i++)
{ s[i][i]=0;
for(j=i-1;j>1;j--)
s[i][j]=k*s[i][j+1]+2*s[i-2][j-1]+s[i-1][j];
s[i][1]=k*s[i][2]+s[i-1][1];
s[i][0]=k*s[i][1];
}
sol=s[n][0];
fprintf(g,"%lld\n",sol);
uc='A';for(i=1;i<k;i++)uc++;
sc[poz]='A';while(p>s[n][1]){sc[poz]++;p=p-s[n][1];}poz++;
nv=1;ll=n;
numar();
fprintf(g,"%s\n",sc);
fcloseall();
return 0;
}
void numar()
{
if(poz==n)return;
if(poz==n-1)
{ if(nv==1){sc[poz]='!';poz++;numar();return;}
if(p==1){sc[poz]='+';poz++;numar();return;}
sc[poz]='*';poz++;numar();return;
}
if(nv==1){
sc[poz]='A';nv++;
while((sc[poz]<=uc)&&(s[ll][nv]<p))
{ p-=s[ll][nv];
sc[poz]++;
}
if(sc[poz]<=uc){poz++;numar();if(poz==n)return;}
else { sc[poz]='!';poz++;ll--;nv--;numar();if(poz==n)return;}
}
sc[poz]='A';nv++;
while((sc[poz]<=uc)&&(s[ll][nv]<p))
{ p-=s[ll][nv];sc[poz]++;}
if(sc[poz]<=uc){poz++;numar();if(poz==n)return;}
else
{ nv--;
sc[poz]='+';nv--;ll-=2;
if(s[ll][nv]<p){sc[poz]='*';p-=s[ll][nv];}
if(s[ll][nv]<p){sc[poz]='!';p-=s[ll][nv];nv++;ll++;poz++;numar();if(poz==n)return;}
poz++;numar();
}
}
// 1 AA +!
// 2 AA *!
// 3 AA !+
// 4 AA !*
// 5 A B+!
// 6 A B*!
// 7 A B!+
// 8 A B!*
// 9 A !A+
//10 A !A*
//11 A !B+
//12 A !B*
//13 A !!!
//14 BA+!
//15 BA*!
//16 BA!+
//17 BA!*
//18 BB+!
//19 BB*!
//20 BB!+
//21 BB!*
//22 B!A +
//23 B!A *
//24 B!B +
//25 B!B *
//26 B!!!
//A A+
//A A*
//A B+
//A B*
//A !!
//BA+
//BA*
//BB+
//BB*
//B!!
//s[3][3]=0;
//s[3][2]=2;
//s[3][1]=5
//s[3][0]=10
//A!
//B!