Cod sursa(job #2630823)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 27 iunie 2020 13:12:32
Problema Pavare2 Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define maxn 1005

std::ifstream fin ("pavare2.in");
std::ofstream fout ("pavare2.out");

long long dp[2][maxn];

int main()
{
    int n, maxWhite, maxBlack, i, j, K, crt=0, last=-1;
    fin >> n >> maxWhite >> maxBlack;
    dp[0][0] = 1;
    dp[1][0] = 1;
    for (i=1; i<=n; i++){
        for (j=1; j<=maxWhite and j<=i; j++)
            dp[0][i] += dp[1][i-j];
        for (j=1; j<=maxBlack and j<=i; j++)
            dp[1][i] += dp[0][i-j];
    }
    fout << dp[0][n] + dp[1][n] << '\n';

    fin >> K;
    while (crt < n){
        if (last != 0)
        for (j=std::min (maxWhite, n-crt); j>=1; j--){
            if (K <= dp[1][n-crt-j]){
                crt += j;
                while (j--)
                    fout << 0;
                last = 0;
                break;
            }
            K -= dp[1][n-crt-j];
        }

        if (last != 1)
        for (j=1; j<=std::min (maxBlack, n-crt); j++){
            if (K <= dp[0][n-crt-j]){
                crt += j;
                while (j--)
                    fout << 1;
                last = 1;
                break;
            }
            K -= dp[0][n-crt-j];
        }
    }
    return 0;
}