Cod sursa(job #2940951)

Utilizator pifaDumitru Andrei Denis pifa Data 16 noiembrie 2022 19:58:08
Problema Pavare2 Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("pavare2.in");
ofstream out("pavare2.out");

int n, a, b, k;

vector <string> v;

string secventa(int st, int dr, string s)
{
    string r = "";
    for(int i = st; i <= dr; i++)
        r += s[i];
    return r;
}

int lung(string s, char ch)
{
    int cnt = 0;
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] == ch && s[i + 1] == ch)
            cnt++;
    }
    return cnt + 1;
}

int ok(string s)
{
    int vf = 0;
    for(int i = 0; i < s.size(); i++)
    {
        for(int j = i; j < s.size(); j++)
        {
            if(lung(secventa(i, j, s), '0') > a || lung(secventa(i, j, s), '1') > b)
            {
                vf = 1;
            }
        }
    }
    return vf;
}

void gen(int n, string s, int ones, int zeros)
{
    if (s.length() == n)
    {
        v.push_back(s);
        return;
    }
    if (ones <= b)
        gen(n, s + "1", ones + 1, zeros);
    if (zeros <= a)
        gen(n, s + "0", ones, zeros + 1);
}

int main()
{
    in >> n >> a >> b >> k;
    string s = "";
    gen(n, s, 0, 0);
    for(int i = 0; i < v.size(); i++)
    {
        if(ok(v[i]))
            v.erase(v.begin() + i);
    }
    sort(v.begin(), v.end());
    out << v.size() << '\n';
    out<< v[k - 1];
    return 0;
}