This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define szof(s) (int)s.size()
#define all(s) s.begin(), s.end()
using namespace std;
vector <int> good;
bool used[(1 << 18)];
int cnt = 0;
int start = 0;
int n, k, t;
int par[(1 << 18)];
string binary(int x) {
string s = "";
for (int i = 0; i < n; i++) {
if (x & (1 << i)) {
s += '1';
} else {
s += '0';
}
}
return s;
}
void dfs(int v, int sz = 1) {
if (sz == cnt) {
if ((t == 0) || (t == 1 && __builtin_popcount((v ^ start)) == k)) {
vector <int> path;
int fn = v;
while (fn != start) {
path.push_back(fn);
fn = par[fn];
}
path.push_back(start);
reverse(all(path));
cout << cnt << endl;
for (int el : path) {
cout << binary(el) << endl;
}
exit(0);
}
} else {
for (int mask : good) {
int nxt = (v ^ mask);
if (!used[nxt]) {
par[nxt] = v;
used[nxt] = 1;
dfs(nxt, sz + 1);
par[nxt] = -1;
used[nxt] = 0;
}
}
}
}
signed main() {
cin >> n >> k >> t;
if (k % 2 == 0) {
return cout << -1, 0;
}
string s;
cin >> s;
for (int i = 0; i < n; i++) {
if (s[i] == '1') {
start += (1 << i);
}
}
for (int mask = 0; mask < (1 << n); mask++) {
if (__builtin_popcount(mask) == k) {
good.push_back(mask);
}
}
cnt = (1 << n);
memset(par, -1, sizeof (par));
used[start] = 1;
dfs(start);
// в любом случае найдёт
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |