Submission #218835

#TimeUsernameProblemLanguageResultExecution timeMemory
218835Lawliet"The Lyuboyn" code (IZhO19_lyuboyn)C++14
100 / 100
208 ms6512 KiB
#include <bits/stdc++.h> using namespace std; int n, k, t; vector< int > ans; void printBinary(int k) { for(int i = n - 1 ; i >= 0 ; i--) { if( k & (1 << i) ) printf("1"); else printf("0"); } printf("\n"); } int toNumber(string s) { int val = 0; for(int i = 0 ; i < s.size() ; i++) { val *= 2; val += s[i] - '0'; } return val; } bool isGood(int a, int b, int v) { int aux = a^b; return ( __builtin_popcount(aux) == v ); } void printAnswer(int firstValue) { printf("%d\n",(int) ans.size()); int indFirst = 0; for(int i = 0 ; i < ans.size() ; i++) if( ans[i] == firstValue ) indFirst = i; int lim = indFirst - 1; if( lim == -1 ) lim = ans.size() - 1; for(int i = indFirst ; i != lim ; i++, i %= ans.size()) printBinary( ans[i] ); printBinary( ans[lim] ); } int main() { string s; cin >> n >> k >> t >> s; if( k%2 == 0 ) { printf("-1\n"); return 0; } int firstValue = toNumber( s ); ans.push_back( 0 ); ans.push_back( 1 ); for(int i = 2 ; i <= k + 1 ; i++) { int curSz = ans.size(); for(int j = 0 ; j < ans.size() ; j++) ans[j] = 2*ans[j]; for(int j = curSz - 1 ; j >= 0 ; j--) ans.push_back( ans[j] + 1 ); } if( k == 1 ) { for(int i = k + 2 ; i <= n ; i++) { int curSz = ans.size(); for(int j = 0 ; j < ans.size() ; j++) ans[j] = 2*ans[j]; for(int j = curSz - 1 ; j >= 0 ; j--) ans.push_back( ans[j] + 1 ); } printAnswer( firstValue ); return 0; } for(int i = 1 ; i < ans.size() ; i += 2) ans[i] = (1 << (k + 1)) - 1 - ans[i]; for(int i = k + 2 ; i <= n ; i++) { int curSz = ans.size(); int indFirst = -1; for(int j = 1 ; j < ans.size() && indFirst == -1 ; j++) { if( !isGood( ans[j] , ans.back() , k - 1 ) ) continue; if( !isGood( ans[j - 1] , ans[0] , k - 1 ) ) continue; indFirst = j; } assert( indFirst != -1 ); for(int j = 0 ; j < ans.size() ; j++) ans[j] = 2*ans[j]; int lim = indFirst - 1; if( lim == -1 ) lim = curSz - 1; for(int j = indFirst ; j != lim ; j++, j %= curSz) ans.push_back( ans[j] + 1 ); ans.push_back( ans[lim] + 1 ); } printAnswer( firstValue ); }

Compilation message (stderr)

lyuboyn.cpp: In function 'int toNumber(std::__cxx11::string)':
lyuboyn.cpp:24:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0 ; i < s.size() ; i++)
                  ~~^~~~~~~~~~
lyuboyn.cpp: In function 'void printAnswer(int)':
lyuboyn.cpp:45:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0 ; i < ans.size() ; i++)
                  ~~^~~~~~~~~~~~
lyuboyn.cpp: In function 'int main()':
lyuboyn.cpp:77:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0 ; j < ans.size() ; j++)
                   ~~^~~~~~~~~~~~
lyuboyn.cpp:90:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j = 0 ; j < ans.size() ; j++)
                    ~~^~~~~~~~~~~~
lyuboyn.cpp:101:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1 ; i < ans.size() ; i += 2)
                  ~~^~~~~~~~~~~~
lyuboyn.cpp:110:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 1 ; j < ans.size() && indFirst == -1 ; j++)
                   ~~^~~~~~~~~~~~
lyuboyn.cpp:120:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0 ; j < ans.size() ; j++)
                   ~~^~~~~~~~~~~~
#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...