| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Mã khóa nhị phân | 100 (p) | 1.0s | 512M |
| 2 | XOR-Sum | 100 (p) | 0.5s | 1G |
| 3 | Chia hết cho 2^k | 100 (p) | 1.0s | 256M |
| 4 | Nhân 2 trừ 1 | 100 (p) | 1.0s | 256M |
| 5 | COIN | 100 (p) | 1.0s | 256M |
| 6 | 00 và 11 | 100 (p) | 1.0s | 256M |
| 7 | CSES - Bit Problem | Bài toán về Bit | 100 (p) | 1.0s | 512M |
| 8 | Toán tử bit | 100 (p) | 1.0s | 512M |
Phòng học của lớp ITK19 vừa đổi từ khóa cơ sang khóa điện tử. Mật khẩu của khóa điện tử này là một đoạn mã nhị phân độ dài \(3n\), các bit của đoạn mã này được đánh số từ \(1\) đến \(3n\) theo chiều từ trái sang phải. Ta quy ước trọng số của một mã nhị phân bằng với \(1\) cộng cho số cặp bit kề nhau mà khác nhau. Ví dụ, đoạn mã 000 có trọng số là 1 còn đoạn mã 011010100 có trọng số là \(7\).
Bảo Khoa muốn trọng số của mã khóa phải lớn hơn hoặc bằng \(2n\) nên anh ấy đang nghiên cứu tìm ra một dãy thao tác để biến đổi mã khóa ban đầu. Ở mỗi thao tác, Bảo Khoa có thể chọn hai bit kề nhau trong đoạn mã và đảo chúng. Bạn hãy lập trình xác định một dãy thao tác có độ dài không quá \(n\) để biến đổi mã khóa ban đầu thành một mã khóa mới có trọng số ít nhất là \(2n\). Dữ liệu đảm bảo luôn tồn tại một cách biến đổi thỏa mãn.
Dòng đầu tiên ghi ra số nguyên \(m (0 \leq m \leq n)\) là số thao tác cần thực hiện.
Dòng tiếp theo ghi ra \(m\) số chỉ số nguyên \(a_1, a_2,\cdots, a_m\) thể hiện phương án đảo bit bạn tìm được. Số nguyên \(a_k\) thể hiện chỉ số của bit bên trái trong hai bit được đảo ở thao tác thứ \(k\).
Nếu đoạn mã ban đầu đã có trọng số lớn hơn hoặc bằng \(2n\) sẵn, bạn chỉ cần in ra số \(0\).
Test 1
000000000
3
2 5 6
Test 2
111001000111
2
3 9
Test 3
010101
0
Tính \(1 \oplus 2 \oplus 3 \oplus \dots \oplus n\) với \(n\) được nhập từ bàn phím.
Test 1
2
3
6
0
7
Nhân ngày 01/01/2021, Văn Quốc Khánh được mẹ cho một món quà, món quà được làm bằng hộp kim loại có mật khẩu. Mẹ Khánh rất thích những con số \(2^k\) với \(k\) là một số nguyên dương. Cho nên mật khẩu có dạng như sau:
Cho một số gồm \(N\) số nguyên dương \(A_1, A_2,\dots, A_N\), hãy chọn ra 3 số sao cho tích của 3 số đó chia hết cho \(2^k\). Hai cách chọn được xem là khác biệt khi có ít nhất một chỉ số ở cách 1 không có trong cách 2.
Ví dụ: \(1,2,3\) và \(2,1,4\) được xem là 2 cách khác biệt, còn \(2,1,3\) và \(3,2,1\) được xem là cùng 1 cách.
Test 1
30 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1925
Cho \(q\) (\(q \leq 10^5\)) truy vấn, mỗi truy vấn cho hai số nguyên dương \(x, y\). Tìm số thao tác ít nhất để biến đổi \(x\) thành \(y\), biết rằng mỗi thao tác được thực hiện một trong hai hành động sau:
Test 1
3
1 4
2 5
6 5
2
4
1
Cách biến đổi tối ưu của mỗi truy vấn:
Naruto có \(N\) cái túi, túi thứ \(i\) có \(A_i\) đồng tiền. Mỗi lần đi làm nhiệm vụ, Naruto sẽ chọn ra một số túi để mang theo nếu thỏa mãn điều kiện sau:
Gọi \(S\) là tổng số tiền trong tất cả các túi Naruto chọn, cần chọn sao cho \(S \% 2 = P\) (% là phép lấy phần dư, % trong C++ và mod trong pascal). Hỏi Naruto có bao nhiêu cách chọn các túi?
Test 1
2 0
1 3
2
Từ xâu nhị phân \(𝑆_0 =\)1, người ta sinh ra các xâu \(𝑆_1, 𝑆_2, … , 𝑆_𝑛\) trong đó \(𝑆_𝑖 = 𝑆_{𝑖−1} + \overline{𝑆_{𝑖−1}}\). Ở đây \(\overline{S_{i-1}}\) là xâu nhị
phân tạo thành từ xâu \(\overline{S_{i-1}}\) bằng cách đảo hết các bit (bit 1 thành bit 0 và bit 0 thành bit 1). Ví dụ:
\(𝑆_0 =\)"\(1\)"
\(𝑆_1 =\)"\(10\)"
\(𝑆_2 =\)"\(1001\)"
\(𝑆_3 =\)"\(10010110\)"
\(𝑆_4 =\)"\(1001011001101001\)"
Yêu cầu: Cho số nguyên dương \(𝑛\), hãy xác định trong xâu \(𝑆_𝑛\) có bao nhiêu vị trí có 2 bit liên tiếp bằng nhau (tức
là đếm số lần xuất hiện của xâu “00” và “11” trong \(𝑆_𝑛\))
Test 1
4
1
2
3
4
0
1
2
5
Cho một dãy số gồm \(n\) phần tử, nhiệm vụ của bạn là tính toán với mỗi phần tử \(x\):
Test 1
5
3 7 2 9 2
3 2 5
4 1 5
2 4 4
1 1 3
2 4 4
Cho trước giá trị \(C\) và \(N\) thao tác bit, thao tác thứ \(i\) có dạng \(T \ A\), trong đó:
Đức có một biến số nguyên \(X\). Ban đầu, Đức gán \(X=C\) và tiến hành \(N\) bước tính toán:
Bạn hãy giúp Đức viết chương trình thực hiện \(N\) bước tính toán trên nhé!
Test 1
3 19
3 10
2 13
1 6
25
31
4