Pagini recente » Cod sursa (job #28851) | Cod sursa (job #77) | Cod sursa (job #3173404) | Cod sursa (job #3276429) | Cod sursa (job #2940951)
#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;
}