제출 #288131

#제출 시각아이디문제언어결과실행 시간메모리
288131dvdg6566"The Lyuboyn" code (IZhO19_lyuboyn)C++14
100 / 100
76 ms6520 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pi;
typedef vector<int> vi;
typedef vector<pi> vpi;
#define pb emplace_back
#define mp make_pair
#define f first
#define s second
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define lb lower_bound
const int MAXN=1001000;
const ll MOD=998244353;

int N,K,T;
string S;

void tobin(int y,int len){
	string x;
	while(y){
		x+=('0' + y%2);
		y/=2;
	}
	while(SZ(x) < len)x+='0';
	reverse(ALL(x));
	cout<<x;
}

vector<int> generate(int N,int K){
	// cerr<<N<<' '<<K<<'\n';
	int mod=(1<<(N-K+1));
	vi A;
	A.resize((1<<N),0);
	ll alen=(K-1);
	int ind=0;

	int backf = min(K-1, N-K+1);
	int frontf = K-backf;
	if(frontf%2==0){
		++frontf;
		--backf;
	}
	// cerr<<backf<<' '<<frontf<<'\n';
	vi B;
	if(frontf > 1){
		B = generate(K-1, frontf);
		// for(auto i:B)cerr<<i<<' ';cerr<<'\n';
	}
	int ind2=0;

	for(int i=1;i<=(1<<alen);++i){
		for(int j=0;j<mod-1;++j){
			
			A[ind] += ((1<<alen) - 1) * mod;
			++ind;
			// A.pb(A.back() ^ ((1<<alen)-1));
		}
		if(frontf == 1) A[ind] += (i&(-i))*mod;
		else{
			A[ind] += B[ind2]*mod;
			++ind2;
		}
		++ind;
		// flip A back
		// if(SZ(A) < (1<<N))A.pb(A.back() ^ (i&(-i)));
	}

	// for(auto i:A)cerr<<i<<' ';cerr<<'\n';
	ind=0;
	for(int i=1;i<=(1<<alen);++i){
		for(int j=1;j<mod;++j){
			// B.pb(B.back() ^ (j&(-j)));
			A[ind] += (j&(-j));
			++ind;
		}
		A[ind] += (1<<backf)-1;
		++ind;
		// flip A back
		// if(SZ(B) < (1<<N))B.pb(B.back() ^ ((1<<(K-1))-1));
	}
	// for(auto i:A)cerr<<i<<' ';cerr<<'\n';
	return A;
}

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin>>N>>K>>T>>S;
	if(K%2==0){
		cout<<-1;
		return 0;
	}

	ll v=0;ll k=1;
	while(SZ(S)){
		if(S.back() == '1')v+=k;
		k*=2;
		S.pop_back();
	}

	vi A = generate(N,K);

	cout<<(1<<N)<<'\n';
	tobin(v,N);cout<<'\n';
	for(int i=0;i<((1<<N)-1);++i){
		v ^= A[i];
		tobin(v,N);cout<<'\n';
	}

	// for(int i=0;i<SZ(A);++i){
	// 	// if(flip&&i%2){
	// 	// 	A[i]=((1<<(K-1))-1)^A[i];
	// 	// 	B[i]=((1<<(N-K+1))-1)^B[i];
	// 	// }
	// 	tobin(B[i],(N-K+1));
	// 	tobin(A[i],K-1);
	// 	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...