Submission #1131979

#TimeUsernameProblemLanguageResultExecution timeMemory
1131979alexander707070"The Lyuboyn" code (IZhO19_lyuboyn)C++20
100 / 100
100 ms7612 KiB
#include<bits/stdc++.h>
#define MAXN 100007
using namespace std;

int n,k,t,start;
string s;

vector<int> seq,w;

void grey_code(int bits){
    seq={0};

    for(int i=0;i<bits;i++){
        int sz=(1<<i);

        for(int f=sz-1;f>=0;f--){
            seq.push_back(seq[f]^(1<<i));
        }
    }

    w.resize((1<<bits));
    w[0]=seq[0];

    for(int i=1;i<seq.size();i++){
        w[i]=w[i-1]^((1<<bits)-1)^(seq[i]^seq[i-1]);
    }
}

void extend_code(int t){

    for(int i=0;i<t;i++){
        int sz=int(w.size());
        int pos=-1;

        for(int f=0;f<sz;f++){
            if(__builtin_popcount(w[f]^w[0])==k-1 and __builtin_popcount(w[(f+1)%sz]^w[sz-1])==k-1)pos=f;
        }

        if(pos!=-1){
            for(int f=pos+1;f<=pos+sz;f++){
                w.push_back(w[f%sz]^sz);
            }
        }else{
            for(int f=0;f<sz;f++){
                if(__builtin_popcount(w[f]^w[0])==k-1 and __builtin_popcount(w[(f-1+sz)%sz]^w[sz-1])==k-1)pos=f;
            }

            if(pos==-1){
                cout<<1/0;
                return;
            }

            for(int f=pos-1;f>=pos-sz;f--){
                w.push_back(w[(f+sz)%sz]^sz);
            }
        }

    }

}

void prnt(int x){
    for(int s=n-1;s>=0;s--){
        if((1<<s)&x)cout<<"1";
        else cout<<"0";
    }
    cout<<"\n";
}

int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin>>n>>k>>t;
    cin>>s;

    for(int i=0;i<s.size();i++){
        start*=2; start+=s[i]-'0';
    }

    if(k%2==0 or k>=n){
        cout<<"-1\n";
        return 0;
    }

    grey_code(k+1);
    extend_code(n-(k+1));

    for(int i=0;i<w.size();i++)w[i]^=start;

    cout<<(1<<n)<<"\n";
    for(int i:w)prnt(i);

	return 0;
}

Compilation message (stderr)

lyuboyn.cpp: In function 'void extend_code(int)':
lyuboyn.cpp:49:24: warning: division by zero [-Wdiv-by-zero]
   49 |                 cout<<1/0;
      |                       ~^~
#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...