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>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << " is " << x << endl
#define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
//change less to less_equal for non distinct pbds, but erase will bug
mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
int n,k,t;
string s;
vector<string> dp(int i,int j){
if (j==1){
vector<string> v;
string st;
rep(x,0,i) st+="0";
v.push_back(st);
rep(x,0,i){
int temp=sz(v);
rep(y,temp,0){
v.push_back(v[y]);
v.back()[x]='1';
}
}
return v;
}
else{
auto v=dp(i-2,j-2);
vector<string> res;
int t=sz(v);
int idx;
rep(x,0,i-2) if (v[0][x]==v.back()[x]) idx=x+2;
rep(x,0,t){
if (x%2==0) res.push_back("00"+v[x%t]);
else res.push_back("11"+v[x%t]);
}
rep(x,0,t){
if (x%2==0) res.push_back("01"+v[x%t]);
else res.push_back("10"+v[x%t]);
res.back()[idx]^=1;
}
rep(x,0,t){
if (x%2==0) res.push_back("11"+v[x%t]);
else res.push_back("00"+v[x%t]);
}
rep(x,0,t){
if (x%2==0) res.push_back("10"+v[x%t]);
else res.push_back("01"+v[x%t]);
res.back()[idx]^=1;
}
return res;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin.exceptions(ios::badbit | ios::failbit);
cin>>n>>k>>t;
cin>>s;
if (k%2==0){
cout<<"-1"<<endl;
return 0;
}
auto v=dp(n,k);
int idx;
rep(x,0,sz(v)) if (v[x]==s) idx=x;
cout<<sz(v)<<endl;
rep(x,0,sz(v)) cout<<v[(x+idx)%sz(v)]<<endl;
rep(x,0,sz(v)){
string s=v[x],t=v[(x+1)%sz(v)];
int cnt=0;
rep(x,0,n) if (s[x]!=t[x]) cnt++;
if (cnt!=k) cout<<s<<" "<<t<<endl;
}
}
Compilation message (stderr)
lyuboyn.cpp: In function 'std::vector<std::__cxx11::basic_string<char> > dp(int, int)':
lyuboyn.cpp:65:18: warning: 'idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
65 | res.back()[idx]^=1;
| ^
lyuboyn.cpp: In function 'int main()':
lyuboyn.cpp:103:27: warning: 'idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
103 | rep(x,0,sz(v)) cout<<v[(x+idx)%sz(v)]<<endl;
| ~~^~~~~
# | 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... |