제출 #1133982

#제출 시각아이디문제언어결과실행 시간메모리
1133982Muhammet"The Lyuboyn" code (IZhO19_lyuboyn)C++20
5 / 100
1099 ms263160 KiB
#include <bits/stdc++.h>
 
using namespace std;

#define SZ(s) (int)s.size()
#define ll long long

const int N = 5e5 + 5;

int n, k, t, a[N], sz, vis[N], b[N], y;

vector <int> v;

void f1(int x, int cnt){
	if(x == sz){
		int y1 = y;
		for(int i = 0; i < sz; i++){
			if(b[i] == 1) y1 ^= (1<<i);
		}
		if(!vis[y1]) v.push_back(y1);
		return;
	}
	if(sz-x+cnt < k) return;
	f1(x+1,cnt);
	if(cnt == k) return;
	for(int i = 0; i < sz; i++){
		if(b[i] == 0){
			b[i] = 1;
			f1(x+1,cnt+1);
			b[i] = 0;
		}
	}
}

int f(int ind){
	if(ind == (1<<n)+1) return (__builtin_popcount(a[ind-1]^a[1]) == k);
	y = a[ind-1];
	f1(0, 0);
	vector <int> v1 = v;
	v.clear();
	for(auto i : v1){
		if(__builtin_popcount(a[ind-1]^i) == k and !vis[i]){
			a[ind] = i;
			vis[i] = true;
			if(f(ind+1)) return true;
			vis[i] = false;
		}
	}
	return false;
}

int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);

	string s;
	cin >> n >> k >> t >> s;
	ll x = 0;
	sz = SZ(s);
	int cnt = -1;
	for(int i = sz-1; i >= 0; i--){
		cnt++;
		if(s[i] == '0') continue;
		x += (1<<cnt);
	}
	a[1] = x;
	vis[x] = true;
	if(!f(2)){
		cout << "-1\n";
		return 0;
	}
	cout << (1<<n) << '\n';
	for(int i = 1; i <= (1<<n); i++){
		vector <int> v;
		while(a[i]){
			v.push_back(a[i]%2);
			a[i] /= 2;
		}
		while(SZ(v) < sz) v.push_back(0);
		reverse(v.begin(), v.end());
		for(auto j : v){
			cout << j;
		}
		cout << '\n';
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...