Cod sursa(job #1680373)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 8 aprilie 2016 18:07:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <cmath>
#define nmax 205
using namespace std;
unsigned short n,k;
struct numar
{
    unsigned int nrc;
    char s[nmax+200];
};
numar T[nmax][nmax];
numar pluss(numar A, numar B)
{
    unsigned int i,t,x1,x2;
    for (i=0,t=0;i<A.nrc || i<B.nrc || t;i++, t/=10)
    {
        if (A.s[i]==0) x1=0;
        else x1=A.s[i]-'0';
        if (B.s[i]==0) x2=0;
        else x2=B.s[i]-'0';
        t+=(x1+x2);
        A.s[i]='0'+t%10;
    }
    A.nrc=i;
    return A;
}
numar ori(numar A, short y)
{
    unsigned int i,t,x;
    for (i=0,t=0;i<A.nrc||t;i++, t/=10)
    {
        if (A.s[i]==0) x=0;
        else x=A.s[i]-'0';
        t+=(x*y);
        A.s[i]='0'+t%10;
    }
    A.nrc=i;
    return A;
}
void getst()
{
    unsigned short i,j;
    numar A;
    T[1][1].nrc=1;
    T[1][1].s[0]='1';
    for (i=2;i<=n;i++)
    {
        for (j=1;j<=i;j++)
        {
            A=ori(T[i-1][j],i-1);
            T[i][j]=pluss(T[i-1][j-1],A);
        }
    }
}
int main()
{
    ifstream f("perm.in");
    ofstream g("perm.out");
    f>>n>>k;
    getst();
    int i;
    numar A=T[n][k];
    for (i=A.nrc-1;i>=0;i--)
    {
        g<<A.s[i];
    }
    g<<'\n';
    f.close();
    g.close();
    return 0;
}