Cod sursa(job #2324645)

Utilizator YetoAdrian Tonica Yeto Data 21 ianuarie 2019 11:17:15
Problema Pavare2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.96 kb
#include <fstream>
#include <cstring>
using namespace std;
long long n, p, q, k, lng, st, i, j;
long long a[105][105][105], b[105][105][105], c[105];

void suma (long long A[], long long B[], long long C[])
{
    int t=0, k=0, i=0;
    for (i=1;i<=A[0] || B[0];i++) {
        k=A[i]+B[i];
        C[i]=k%10;
        t=k/10;
    }
    C[0]=i-1;
    if (t!=0) {
        C[0]++;
        C[i]=t;
    }
}

void dif (long long A[], long long B[], long long C[])
{
    int t=0, k=0, i=0;
    C[0]=A[0];
    for (i=1;i<=A[0];i++) {
        if (A[i]-t<B[i]) {
            k=10+A[i]-B[i];
            t=1;
        } else {
            k=A[i]-t-B[i];
            t=0;
        }
        C[i]=k;
    }
    while (C[C[0]]==0)
        C[0]--;
}

int cmp (long long A[], long long B[])
{
    int i=0;
    if (A[0]>B[0])
        return 1;
    if (A[0]<B[0])
        return -1;
    for (i=A[0];i>=1;i--) {
        if (A[i]>B[i])
            return 1;
        if (A[i]<B[i])
            return -1;
    }
    return 0;
}

int main () {
    ifstream fin ("pavare2.in");
    ofstream fout ("pavare2.out");
    fin>>n>>p>>q;
    fin>>k;

    a[0][0][1]=1;
    a[0][0][0]=1;
    b[0][0][1]=1;
    b[0][0][0]=1;
    a[1][1][1]=1;
    a[1][1][0]=1;
    a[1][0][1]=1;
    a[1][0][0]=1;
    b[1][1][1]=1;
    b[1][1][0]=1;
    b[1][0][1]=1;
    b[1][0][0]=1;

    for (i=2;i<=n;i++) {
        for (j=1;j<=min(i,p);j++) {
            memcpy (a[i][j], b[i-j][0], sizeof(b[i-j][0]));
            ///a[i][j]=b[i-j][0];
            suma(a[i][0], a[i][j], a[i][0]);
            ///a[i][0]+=a[i][j];
        }
        for (j=1;j<=min(q,i);j++) {
            memcpy (b[i][j], a[i-j][0], sizeof(a[i-j][0]));
            ///b[i][j]=a[i-j][0];
            suma(b[i][0], b[i][j], b[i][0]);
            ///b[i][0]+=b[i][j];
        }

    }

    suma(a[n][0], b[n][0], c);
    for(i=c[0];i>=1;i--)
        fout<<c[i];
 /*
    lng=n;
    st=0;
    while (lng!=0) {
        if (st==0) {
            if (k>a[lng][0]) {
                k-=a[lng][0];

            } else {
                for (i=p;i>=1;i--) {
                    if (a[lng][i]>=k) {
                        for (int cnt=1;cnt<=i;cnt++)
                            fout<<st;
                        lng-=i;

                        break;
                    } else {
                        k=k-a[lng][i];
                    }
                }
            }
        } else {
            if (k>b[lng][0]) {
                k-=b[lng][0];

            } else {
                for (i=1;i<=q;i++) {
                    if (b[lng][i]>=k) {
                        for (int cnt=1;cnt<=i;cnt++)
                            fout<<st;
                        lng-=i;

                        break;
                    } else {
                        k=k-b[lng][i];
                    }
                }
            }
        }
        st=1-st;
    }

 */
    return 0;
}