답안 #538619

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
538619 2022-03-17T09:11:46 Z cig32 "The Lyuboyn" code (IZhO19_lyuboyn) C++17
19 / 100
170 ms 9068 KB
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 2e5 + 10;
const int MOD = 1e9 + 7;
#define int long long
#define ll __int128
mt19937_64 rng((int)std::chrono::steady_clock::now().time_since_epoch().count());
int rnd(int x, int y) {
  int u = uniform_int_distribution<int>(x, y)(rng); return u;
}
ll read() { // read int128
  int x; cin >> x; return (ll)x;
}
long long bm(long long b, long long p) {
  if(p==0) return 1 % MOD;
  long long r = bm(b, p >> 1);
  if(p&1) return (((r*r) % MOD) * b) % MOD;
  return (r*r) % MOD;
}
long long inv(long long b) { 
  return bm(b, MOD-2);
}
long long f[MAXN];
long long nCr(int n, int r) { 
  long long ans = f[n]; ans *= inv(f[r]); ans %= MOD;
  ans *= inv(f[n-r]); ans %= MOD; return ans;
}
void precomp() { 
  for(int i=0; i<MAXN; i++) f[i] = (i == 0 ? 1 % MOD : (f[i-1] * i) % MOD);
}
void solve(int tc) {
  int n, k, t;
  cin >> n >> k >> t;
  string s;
  cin >> s;
  vector<int> ans;
  int xorsum = 0;
  ans.push_back(0);
  vector<int> tog;
  int cur = (1<<k) - 1;
  for(int i=1; i<=n; i++) {
    tog.push_back(cur);
    if(cur >= (1 << (n-1))) {
      cur -= (1 << (n-1));
      cur <<= 1;
      cur += 1;
    }
    else {
      cur <<= 1;
    }
  }
  for(int i=1; i<(1<<n); i++) {
    xorsum ^= tog[(int)log2(i & -i)];
    ans.push_back(xorsum);
    //cout << tog[(int)log2(i & -i)] << ' ';
    //if(i % 8 == 0) cout << '\n';
  }
  //cout << '\n';
  //cout << "tog[]: ";
  //for(int i=0; i<n; i++) cout << tog[i] << ' ';
  //cout << '\n';
  //freopen("uwu.txt", "w", stdout);
  if(n % k == 0 && k > 1) {
    cout << "-1\n";
    return;
  }
  if(k % 2 == 0) {
    cout << "-1\n";
    return;
  }
  cout << (1<<n) << '\n';
  int pos;
  int val = 0;
  for(int i=0; i<s.size(); i++) {
    val *= 2;
    val += (s[i] == '1');
  }
  for(int i=0; i<ans.size(); i++) {
    if(ans[i] == val) pos = i;
  }
  for(int i=pos; i<pos+ans.size(); i++) {
    //cout << ans[i % (1<<n)] << "\n";
    //continue;
    for(int j=n-1; j>=0; j--) {
      if(ans[i % (1<<n)] & (1<<j)) cout << "1";
      else cout << "0";
    }
    cout << '\n';
  }
}
int32_t main(){
  precomp();
  ios::sync_with_stdio(0); cin.tie(0);
  int t = 1; //cin >> t;
  for(int i=1; i<=t; i++) solve(i);
} 
/*
17 3 0 0000

7 14 19 25 28

7 14 7 19 7 14 7 25
7 14 7 19 7 14 7 28
7 14 7 19 7 14 7 25
7 14 7 19 7 14 7


0
7
12
11
6
1
10
13
3
4
15
8
5
2
9
14

7
12
1
15
8
3
14
0
7
12
1
15
8
3
14

7  (0111)
13 (1101)
11 (1011)
7  (0111)
14 (1110)
13 (1101)
14 (1110)
7  (0111)
14 (1110)
13 (1101)
11 (1011)
13 (1101)
7  (0111)
13 (1101)
14 (1110)
*/

Compilation message

lyuboyn.cpp: In function 'void solve(long long int)':
lyuboyn.cpp:74:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |   for(int i=0; i<s.size(); i++) {
      |                ~^~~~~~~~~
lyuboyn.cpp:78:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |   for(int i=0; i<ans.size(); i++) {
      |                ~^~~~~~~~~~~
lyuboyn.cpp:81:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'long long unsigned int' [-Wsign-compare]
   81 |   for(int i=pos; i<pos+ans.size(); i++) {
      |                  ~^~~~~~~~~~~~~~~
lyuboyn.cpp:81:20: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
   81 |   for(int i=pos; i<pos+ans.size(); i++) {
      |                    ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1876 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1876 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 2004 KB Ok
2 Correct 8 ms 4048 KB Ok
3 Correct 5 ms 3028 KB Ok
4 Correct 3 ms 1876 KB Ok
5 Correct 2 ms 1876 KB Ok
6 Correct 2 ms 1876 KB Ok
7 Correct 3 ms 2004 KB Ok
8 Correct 4 ms 3028 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 159 ms 9064 KB Ok
2 Correct 83 ms 5316 KB Ok
3 Correct 3 ms 1876 KB Ok
4 Correct 3 ms 1876 KB Ok
5 Correct 3 ms 1784 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1876 KB Ok
2 Correct 6 ms 2116 KB Ok
3 Correct 68 ms 5312 KB Ok
4 Correct 38 ms 3668 KB Ok
5 Incorrect 3 ms 1876 KB Output -1 while solution exists
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 162 ms 8992 KB Ok
2 Correct 157 ms 9068 KB Ok
3 Incorrect 6 ms 4048 KB Output -1 while solution exists
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 159 ms 9064 KB Ok
2 Correct 83 ms 5316 KB Ok
3 Correct 3 ms 1876 KB Ok
4 Correct 3 ms 1876 KB Ok
5 Correct 3 ms 1784 KB Ok
6 Correct 2 ms 1876 KB Ok
7 Correct 6 ms 2116 KB Ok
8 Correct 68 ms 5312 KB Ok
9 Correct 38 ms 3668 KB Ok
10 Incorrect 3 ms 1876 KB Output -1 while solution exists
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 75 ms 5344 KB Ok
2 Correct 159 ms 9036 KB Ok
3 Correct 170 ms 8964 KB Ok
4 Correct 11 ms 2388 KB Ok
5 Correct 3 ms 1876 KB Ok
6 Correct 21 ms 2704 KB Ok
7 Correct 157 ms 9020 KB Ok
8 Incorrect 3 ms 1876 KB Output -1 while solution exists
9 Halted 0 ms 0 KB -