Cod sursa(job #1938027)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 24 martie 2017 15:50:35
Problema Expresii 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
using namespace std;
ifstream f("expresii2.in");
ofstream g("expresii2.out");
int n,m,i,j,k,p,y,s[35];
long long x,sol,c[35][35][35];
int main()
{
    f>>n>>m>>x;
    c[0][1][0]=1;
    for(i=0;i<n;++i)
        for(j=0;j<=n;++j)
            for(k=0;k<m+3;++k)
            if(c[i][j][k])
            {
                 if(j<n-i) c[i+1][j][m+2]+=c[i][j][k];
                 if(j>1||(j==1&&i==n-1)) for(p=0;p<m;++p) c[i+1][j-1][p]+=c[i][j][k];
                 if(j<n-i-1)
                 {
                    c[i+1][j+1][m]+=c[i][j][k];
                    c[i+1][j+1][m+1]+=c[i][j][k];
                 }
            }
    for(j=0;j<m+2;++j) sol+=c[n][0][j];
    for(i=n;i;--i)
        for(j=0;j<m+3;++j)
            if(c[i][y][j]<x) x-=c[i][y][j];
            else
            {
                s[n-i+1]=j;
                if(j<m) y++;
                else y-=(j<m+2);
                j=m+3;
            }
    g<<sol<<'\n';
    for(i=1;i<=n;++i)
    if(s[i]<m) g<<char('A'+s[i]);
    else if(s[i]==m) g<<'+';
    else g<<(s[i]==m+1?'*':'!');
    return 0;
}