Cod sursa(job #2322957)

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

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

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

    for (i=2;i<=n;i++) {
        for (j=1;j<=p;j++) {
            a[i][j]=b[i-j][0];
        }
        for (j=1;j<=q;j++) {
            b[i][j]=a[i-j][0];
        }
        for (j=1;j<=i;j++) {
            a[i][0]+=a[i][j];
            b[i][0]+=b[i][j];
        }
    }

    fout<<a[n][0]+b[n][0]<<"\n";

    lng=n;
    st=0;
    while (lng!=0) {
        if (st==0) {
            if (k>a[lng][0]) {
                k-=a[lng][0];
                st=1-st;
            } else {
                for (i=p;i>=1;i--) {
                    if (a[lng][i]>=k) {
                        for (int cnt=1;cnt<=i;cnt++)
                            fout<<st;
                        lng-=i;
                        st=1-st;
                        break;
                    } else {
                        k=k-a[lng][i];
                    }
                }
            }
        } else {
            if (k>b[lng][0]) {
                k-=b[lng][0];
                st=1-st;
            } else {
                for (i=1;i<=q;i++) {
                    if (b[lng][i]>=k) {
                        for (int cnt=1;cnt<=i;cnt++)
                            fout<<st;
                        lng-=i;
                        st=1-st;
                        break;
                    } else {
                        k=k-b[lng][i];
                    }
                }
            }
        }

    }


    return 0;
}