# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
343243 | 2021-01-03T15:01:01 Z | IZhO_2021_I_want_Silver | "The Lyuboyn" code (IZhO19_lyuboyn) | C++14 | 291 ms | 23144 KB |
#include <iostream> #include <bitset> #include <vector> using namespace std; #define sz(a) (int)a.size() #define pb push_back #define ppb pop_back const int N = 3e5 + 5; int n, k, t; string s; bitset <N> was; vector <int> vec, good; void show_bits(int x) { for (int i = 0; i < n; ++i) { if (x & (1 << i)) { cout << 1; } else { cout << 0; } } cout << "\n"; } void go(int pos) { if (pos == (1 << n) + 1) { if (t == 1) { if (__builtin_popcount(vec[0] ^ vec.back()) == k) { cout << sz(vec) <<"\n"; for (int i = 0; i < sz(vec); ++i) { show_bits(vec[i]); } exit(0); } } else { cout << sz(vec) <<"\n"; for (int i = 0; i < sz(vec); ++i) { show_bits(vec[i]); } exit(0); } return; } for (int i = 0; i < sz(good); ++i) { int x = (vec.back() ^ good[i]); if (was[x]) { continue; } //if (__builtin_popcount((vec.back() ^ x)) != k) { continue; } was[x] = 1; vec.pb(x); go(pos + 1); was[x] = 0; vec.ppb(); } } void solve() { cin >> n >> k >> t; cin >> s; if (k % 2 == 0) { cout << -1; return; } for (int i = 0; i < (1 << n); ++i) { if (__builtin_popcount(i) == k) { good.pb(i); } } int x = 0; for (int i = 0; i < n; ++i) { if (s[i] == '1') { x += (1 << i); } } was[x] = 1; vec.pb(x); go(2); was[x] = 0; vec.ppb(); return; } main () { ios_base::sync_with_stdio(false); cin.tie(NULL); int tests = 1; //cin >> tests; while (tests --) { solve(); } return 0; } /* Ускоренный перебор правильного порядка * может быстро и легко находится подходящий? * max размер vector good -> 48000 * по сути это ускоренный слоу * вместо того чтобы перебирать (1 << n) = 2 * 10^5 элементов и проверять биты, * мы делаем массив good где все гаходим легко подходящий по битам и проверяем не более 48000 элементов */
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Ok |
2 | Correct | 0 ms | 364 KB | Ok |
3 | Correct | 0 ms | 364 KB | Ok |
4 | Correct | 1 ms | 364 KB | Ok |
5 | Correct | 0 ms | 364 KB | Ok |
6 | Correct | 1 ms | 364 KB | Ok |
7 | Correct | 0 ms | 364 KB | Ok |
8 | Correct | 0 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 277 ms | 23016 KB | Ok |
2 | Correct | 132 ms | 11628 KB | Ok |
3 | Correct | 1 ms | 364 KB | Ok |
4 | Correct | 1 ms | 364 KB | Ok |
5 | Correct | 1 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Ok |
2 | Correct | 7 ms | 1004 KB | Ok |
3 | Correct | 133 ms | 11656 KB | Ok |
4 | Correct | 63 ms | 6128 KB | Ok |
5 | Correct | 1 ms | 364 KB | Ok |
6 | Correct | 2 ms | 492 KB | Ok |
7 | Correct | 30 ms | 3180 KB | Ok |
8 | Correct | 1 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 291 ms | 23136 KB | Ok |
2 | Correct | 280 ms | 23008 KB | Ok |
3 | Correct | 280 ms | 23016 KB | Ok |
4 | Correct | 133 ms | 11620 KB | Ok |
5 | Correct | 132 ms | 11628 KB | Ok |
6 | Correct | 66 ms | 6028 KB | Ok |
7 | Correct | 62 ms | 6000 KB | Ok |
8 | Correct | 30 ms | 3180 KB | Ok |
9 | Correct | 30 ms | 3308 KB | Ok |
10 | Correct | 18 ms | 1772 KB | Ok |
11 | Correct | 1 ms | 364 KB | Ok |
12 | Correct | 1 ms | 364 KB | Ok |
13 | Correct | 1 ms | 364 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 277 ms | 23016 KB | Ok |
2 | Correct | 132 ms | 11628 KB | Ok |
3 | Correct | 1 ms | 364 KB | Ok |
4 | Correct | 1 ms | 364 KB | Ok |
5 | Correct | 1 ms | 364 KB | Ok |
6 | Correct | 1 ms | 364 KB | Ok |
7 | Correct | 7 ms | 1004 KB | Ok |
8 | Correct | 133 ms | 11656 KB | Ok |
9 | Correct | 63 ms | 6128 KB | Ok |
10 | Correct | 1 ms | 364 KB | Ok |
11 | Correct | 2 ms | 492 KB | Ok |
12 | Correct | 30 ms | 3180 KB | Ok |
13 | Correct | 1 ms | 364 KB | Ok |
14 | Correct | 291 ms | 23136 KB | Ok |
15 | Correct | 280 ms | 23008 KB | Ok |
16 | Correct | 280 ms | 23016 KB | Ok |
17 | Correct | 133 ms | 11620 KB | Ok |
18 | Correct | 132 ms | 11628 KB | Ok |
19 | Correct | 66 ms | 6028 KB | Ok |
20 | Correct | 62 ms | 6000 KB | Ok |
21 | Correct | 30 ms | 3180 KB | Ok |
22 | Correct | 30 ms | 3308 KB | Ok |
23 | Correct | 18 ms | 1772 KB | Ok |
24 | Correct | 1 ms | 364 KB | Ok |
25 | Correct | 1 ms | 364 KB | Ok |
26 | Correct | 1 ms | 364 KB | Ok |
27 | Correct | 286 ms | 23016 KB | Ok |
28 | Correct | 136 ms | 11768 KB | Ok |
29 | Correct | 278 ms | 23136 KB | Ok |
30 | Correct | 14 ms | 1772 KB | Ok |
31 | Correct | 1 ms | 364 KB | Ok |
32 | Correct | 7 ms | 1144 KB | Ok |
33 | Correct | 30 ms | 3180 KB | Ok |
34 | Correct | 1 ms | 364 KB | Ok |
35 | Correct | 1 ms | 364 KB | Ok |
36 | Correct | 1 ms | 364 KB | Ok |
37 | Correct | 1 ms | 364 KB | Ok |
38 | Correct | 136 ms | 11756 KB | Ok |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 134 ms | 11628 KB | Ok |
2 | Correct | 286 ms | 23144 KB | Ok |
3 | Correct | 283 ms | 23136 KB | Ok |
4 | Correct | 14 ms | 1772 KB | Ok |
5 | Correct | 1 ms | 364 KB | Ok |
6 | Correct | 33 ms | 3180 KB | Ok |
7 | Correct | 276 ms | 22976 KB | Ok |
8 | Correct | 1 ms | 364 KB | Ok |
9 | Correct | 1 ms | 364 KB | Ok |
10 | Correct | 1 ms | 364 KB | Ok |
11 | Correct | 64 ms | 6000 KB | Ok |
12 | Correct | 136 ms | 11896 KB | Ok |