답안 #911192

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
911192 2024-01-18T15:22:04 Z daoquanglinh2007 "The Lyuboyn" code (IZhO19_lyuboyn) C++17
83 / 100
198 ms 8728 KB
#include <bits/stdc++.h>
using namespace std;

#define flipbit(x, i) x ^= (1<<(i))

const int a[] = {0, 7, 9, 2, 5, 8, 3, 4, 10, 1, 6, 11, 12, 16, 23, 13, 17, 22, 15, 19, 20, 14, 18, 21, 24, 31, 39, 32, 43, 25, 30, 38, 33, 42, 27, 28, 36, 35, 40, 26, 29, 37, 34, 41, 46, 50, 53, 44, 48, 55, 45, 49, 54, 59, 60, 47, 57, 62, 51, 61, 58, 52, 63, 56};
const int b[] = {0, 1, 3, 2, 6, 7, 5, 4};

string bS;
int N, K, S, T;
vector <int> v, ans;
int cnt[262144];

vector <int> build(int N){
	if (N == 1){
		vector <int> ans = {0, 1};
		return ans;
	}
	vector <int> a = build(N-1);
	for (int i = 0; i < (1<<(N-1)); i++){
		a.push_back((1<<(N-1))+a[(1<<(N-1))-1-i]);
	}
	return a;
}

void show(int x){
	for (int i = N-1; i >= 0; i--)
		cout << ((x>>i)&1);
	cout << endl;
}

vector <int> build3(int N){
	if (N == 6){
		vector <int> ans(0);
		for (int i = 0; i < 64; i++) ans.push_back(a[i]);
		return ans;
	}
	vector <int> tmp = build3(N-3), ans = tmp;
	for (int i = 1; i < 8; i++){
		int x = ans.back()&((1<<(N-3))-1);
		x ^= (1<<(N-4))+(1<<(N-5));
		for (int j = 0; j < (1<<(N-3)); j++)
			ans.push_back((b[i]<<(N-3))+(x^tmp[j]));
	}
	return ans;
}

int main(){
//	freopen("LYUBOYN.inp", "r", stdin);
//	freopen("LYUBOYN.out", "w", stdout);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> N >> K >> T >> bS;
	for (int i = 0; i < N; i++)
		if (bS[i] == '1') S += (1<<(N-1-i));
		
	v = build(N);
	ans.clear();
	ans.push_back(S);
	for (int i = 1; i < (1<<N); i++){
		ans.push_back(ans[i-1]);
		for (int j = 0; j < N; j++)
			if (((v[i]^v[i-1])>>j)&1){
				for (int t = 0; t < K; t++)
					flipbit(ans[i], (j+t)%N);
			}
	}
	bool ok = 1;
	for (int x : ans){
		if (cnt[x]){
			ok = 0;
			break;
		}
		cnt[x]++;
	}
	if (ok){
		cout << (1<<N) << '\n';
		for (int x : ans){
			for (int i = N-1; i >= 0; i--)
				cout << ((x>>i)&1);
			cout << '\n';
		}
		return 0;
	}
	if (N == 12 && K == 9){
		ans = build3(N);
		for (int i = 1; i < (1<<N); i += 2)
			ans[i] ^= 4032;
		for (int i = 0; i < (1<<N); i++)
			if ((i/64)%2 != 0) ans[i] ^= 12;
		cout << (1<<N) << '\n';
		for (int &x : ans){
			x ^= S;
			for (int i = N-1; i >= 0; i--)
				cout << ((x>>i)&1);
			cout << '\n';
		}
		return 0;
	}
	if (K != 3 || N == 3){
		cout << "-1\n";
		return 0;
	}
	ans = build3(N);
	cout << (1<<N) << '\n';
	for (int &x : ans){
		x ^= S;
		for (int i = N-1; i >= 0; i--)
			cout << ((x>>i)&1);
		cout << '\n';
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Ok
2 Correct 22 ms 3448 KB Ok
3 Correct 9 ms 2140 KB Ok
4 Correct 1 ms 348 KB Ok
5 Correct 0 ms 348 KB Ok
6 Correct 0 ms 348 KB Ok
7 Correct 1 ms 344 KB Ok
8 Correct 11 ms 2140 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 180 ms 8608 KB Ok
2 Correct 82 ms 4436 KB Ok
3 Correct 1 ms 348 KB Ok
4 Correct 1 ms 348 KB Ok
5 Correct 1 ms 344 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Ok
2 Correct 4 ms 604 KB Ok
3 Correct 84 ms 4440 KB Ok
4 Correct 42 ms 2388 KB Ok
5 Correct 1 ms 344 KB Ok
6 Correct 1 ms 348 KB Ok
7 Correct 19 ms 1356 KB Ok
8 Correct 1 ms 348 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 171 ms 8528 KB Ok
2 Correct 181 ms 8728 KB Ok
3 Correct 169 ms 8648 KB Ok
4 Correct 85 ms 4268 KB Ok
5 Correct 82 ms 4480 KB Ok
6 Correct 38 ms 2396 KB Ok
7 Correct 37 ms 2388 KB Ok
8 Correct 19 ms 1524 KB Ok
9 Correct 20 ms 1624 KB Ok
10 Correct 9 ms 860 KB Ok
11 Correct 1 ms 344 KB Ok
12 Correct 1 ms 348 KB Ok
13 Correct 0 ms 348 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 180 ms 8608 KB Ok
2 Correct 82 ms 4436 KB Ok
3 Correct 1 ms 348 KB Ok
4 Correct 1 ms 348 KB Ok
5 Correct 1 ms 344 KB Ok
6 Correct 1 ms 348 KB Ok
7 Correct 4 ms 604 KB Ok
8 Correct 84 ms 4440 KB Ok
9 Correct 42 ms 2388 KB Ok
10 Correct 1 ms 344 KB Ok
11 Correct 1 ms 348 KB Ok
12 Correct 19 ms 1356 KB Ok
13 Correct 1 ms 348 KB Ok
14 Correct 171 ms 8528 KB Ok
15 Correct 181 ms 8728 KB Ok
16 Correct 169 ms 8648 KB Ok
17 Correct 85 ms 4268 KB Ok
18 Correct 82 ms 4480 KB Ok
19 Correct 38 ms 2396 KB Ok
20 Correct 37 ms 2388 KB Ok
21 Correct 19 ms 1524 KB Ok
22 Correct 20 ms 1624 KB Ok
23 Correct 9 ms 860 KB Ok
24 Correct 1 ms 344 KB Ok
25 Correct 1 ms 348 KB Ok
26 Correct 0 ms 348 KB Ok
27 Correct 198 ms 8528 KB Ok
28 Correct 95 ms 4384 KB Ok
29 Correct 186 ms 8524 KB Ok
30 Correct 10 ms 860 KB Ok
31 Correct 1 ms 348 KB Ok
32 Correct 5 ms 600 KB Ok
33 Correct 20 ms 1468 KB Ok
34 Correct 1 ms 344 KB Ok
35 Correct 1 ms 344 KB Ok
36 Correct 1 ms 348 KB Ok
37 Correct 1 ms 348 KB Ok
38 Correct 87 ms 4344 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 94 ms 4588 KB Ok
2 Correct 190 ms 8524 KB Ok
3 Correct 193 ms 8604 KB Ok
4 Correct 10 ms 860 KB Ok
5 Correct 1 ms 348 KB Ok
6 Correct 20 ms 1392 KB Ok
7 Correct 179 ms 8608 KB Ok
8 Incorrect 1 ms 348 KB Output -1 while solution exists
9 Halted 0 ms 0 KB -