Cod sursa(job #2030141)

Utilizator osiaccrCristian Osiac osiaccr Data 1 octombrie 2017 10:22:41
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>

using namespace std;

ifstream fin("perm.in");
ofstream fout("perm.out");

int i,j,n,k,p1[201][400],p2[201][400],temp[2][400],j2;

void add(int A[][400], int x1, int B[][400], int x2, int C[][400], int x3)
{
      int i, t = 0;
      for (i=1; i<=A[x1][0] || i<=B[x2][0] || t; i++)
      {
            if(A[x1][0] >= i)
            {
                t=t + A[x1][i];
            }
            if(B[x2][0] >= i)
            {
                t=t + B[x2][i];
            }
            //t=t + A[x1][i]+B[x2][i];
            C[x3][i] = t%10;
            t=t/10;
      }
      C[x3][0] = i - 1;
}

void mul(int A[][400], int x1, int B, int C[][400], int x2)
{
      int i, t = 0;
      for (i = 1; i <= A[x1][0] || t; i++)
      {
          if(A[x1][0] >= i)
          {
            t =t + A[x1][i]*B;
          }
          C[x2][i] = t%10;
          t=t/10;
      }

      C[x2][0] = i - 1;
}

int main()
{
fin>>n>>k;
p1[1][0]=1;p1[1][1]=1;
for(i=2;i<=n;i++)
{
    for(j=1;j<=i;j++)
    {
        mul(p1, j, i-1, temp, 1);
        add(temp, 1, p1, j-1, p2, j);
        //p2[j]=p1[j-1] + p1[j]*(i-1);
    }
    for(j=1;j<=i;j++)
    {
        for(j2=1;j2<=p2[j][0];j2++)
        {
            p1[j][j2]=p2[j][j2];
        }
        p1[j][0]=p2[j][0];
        p2[j][0]=0;
        //p1[j]=p2[j];
        //p2[j] = 0;
    }
}
for(i=p1[k][0];i>=1;i--)
{
    fout<<p1[k][i];
}
//fout<<p1[k];


return 0;
}