You are on page 1of 3

Đề Dự tuyển 2022_Ngày 29_7_2022_PM NTVK

Bài 1. Bài toán lũy thừa hai.


Bài toán:
Một số nguyên dương x được gọi là lũy thừa của hai nếu nó có thể được biểu diễn
dưới dạng x = 2y, trong đó y là một số nguyên không âm. Như vậy, các giá trị của lũy thừa
hai là: 1,2,4,8,16, ....
Bạn được cho hai số nguyên dương n và k. Nhiệm vụ của bạn là phân tích số n sao
cho nó là tổng của chính xác k số có dạng lũy thừa hai.
Dữ liệu vào: Từ file văn bản POWER2.INP
- Gồm duy nhất một dòng chứa 2 số nguyên n và k (1≤ n ≤ 109, 1≤ k ≤ 2.105).
Dữ liệu ra: Ghi ra file văn bản POWER2.OUT
- Nếu không biểu diễn được n là tổng của k lũy thừa hai thì ghi ra duy nhất một dòng
chữ “NO”
- Trường hợp tìm được ghi ra 2 dòng:
+ Dòng 1: Ghi chữ “YES”
+ Dòng 2: Ghi ra k số nguyên dương b1, b2,…, bk sao cho mỗi bi là một lũy thừa hai
và tổng của chúng bằng n. Nếu có nhiều kết quả, bạn chỉ cần đưa ra kết quả đầu tiên.
Ví dụ:
POWER2.INP POWER2.OUT
94 YES
1224
5 1 NO
Bài 2. Bài toán nuôi vi khuẩn.
Bài toán:
Bạn là người yêu vi khuẩn. Bạn muốn nuôi một số vi khuẩn trong một hộp.
Ban đầu, hộp trống rỗng. Mỗi buổi sáng, bạn có thể cho bất kỳ số lượng vi khuẩn vào
hộp. Và mỗi đêm, mọi vi khuẩn trong hộp sẽ phân chia thành hai vi khuẩn. Bạn hy vọng
một lúc nào đó sẽ thấy chính xác x vi khuẩn trong hộp.
Hãy xác định số lượng vi khuẩn tối thiểu bạn cần cho vào hộp trong những ngày đó
là bao nhiêu?
Dữ liệu vào: Từ file văn bản VIKHUAN.INP
- Gồm duy nhất một dòng chứa một số nguyên dương x (1 ≤ x ≤ 109).
Dữ liệu ra: Ghi ra file văn bản VIKHUAN.OUT
Gồm duy nhất một dòng ghi ra kết quả tìm được.
Ví dụ:
VIKHUAN.INP VIKHUAN.OUT
5 2
8 1
Giải thích:
- Trong ví dụ 1: chúng ta có thể thêm một vi khuẩn vào hộp vào sáng ngày đầu tiên
và vào sáng thứ ba sẽ có 4 vi khuẩn trong hộp. Để thấy chính xác 5 vi khuẩn trong
hộp . Vì vậy ta đã thêm 2 vi khuẩn trong quá trình.
- Trong ví dụ thứ hai: chúng ta có thể đặt một vi khuẩn vào buổi sáng đầu tiên và
vào buổi sáng thứ 4 sẽ có 8 vi khuẩn trong hộp. Vì vậy, câu trả lời là 1.
Đề Dự tuyển 2022_Ngày 29_7_2022_PM NTVK

Bài 3. Bài toán bữa tiệc sinh nhật.


Bài toán:
Sau sinh nhật của Misha, anh ta còn lại rất nhiều số lớn, nằm rải rác trong phòng. Bây
giờ là lúc để dọn dẹp và Misha cần bỏ chúng vào một cái giỏ. Anh ra lệnh cho nhiệm vụ
này cho robot thú cưng của mình, robot đã đồng ý hoàn thành nhiệm vụ ở một số điều kiện
nhất định. Trước khi robot đặt một số x vào giỏ, Misha nên trả lời câu hỏi: có thể chọn một
hoặc nhiều số đã có trong giỏ không, sao cho tổng XOR của chúng bằng x?
Nếu câu trả lời là tích cực, bạn cũng cần đưa ra chỉ số của những con số này. Nếu có
nhiều cách chọn số, bạn được phép chọn bất kỳ cách chọn chính xác. Sau câu trả lời của
Misha, robot đặt số vào giỏ.
Ban đầu giỏ trống. Mỗi số nguyên bạn đặt trong giỏ mất một số. Số nguyên đầu tiên
bạn đặt vào giỏ lấy số 0, số nguyên thứ hai lấy số 1, v.v.
Misha cần dọn dẹp nơi này càng sớm càng tốt, nhưng thật không may, anh ta không
giỏi toán. Anh ấy nhờ bạn giúp anh ấy.
Dữ liệu vào: Từ file văn bản XOR.INP
- Dòng đầu tiên chứa số m (1 ≤ m ≤ 2000), cho biết có bao nhiêu số nằm rải rác
trong phòng.
- m dòng tiếp theo chứa các số theo thứ tự mà robot đặt chúng vào giỏ. Mỗi số là
một số nguyên dương nhỏ hơn 10600 không chứa các số 0 đứng đầu.
Dữ liệu ra: Ghi ra file văn bản XOR.OUT
- Đối với mỗi số, in số 0 trên dòng tương ứng, nếu số đó không thể được biểu diễn
dưới dạng tổng XOR của các số trong rổ, hoặc in số nguyên k cho biết có bao
nhiêu số trong biểu diễn và chỉ số của các số này. Các số cách nhau bởi dấu cách.
Mỗi số có thể xảy ra nhiều nhất một lần.
Ví dụ:
XOR.INP XOR.OUT
7 0
7 0
6 0
5 3012
4 212
3 202
2 201
1
2 0
5 10
5
Tổng XOR của các số là kết quả của tổng bitwise của các số modulo 2.
Bài 4. Bài toán phép toán OR.
Bài toán:
An được cho một dãy n số nguyên không âm: a1, a2, ..., an.
Hãy xác định hàm f (l, r) (l, r là số nguyên, 1 ≤ l ≤ r ≤ n) cho dãy a là một hoạt động
của bitwise OR của tất cả các phần tử của dãy có chỉ số từ l đến r. Chính thức: f (l, r) = al
| al + 1 | ... | ar.
Đề Dự tuyển 2022_Ngày 29_7_2022_PM NTVK

An lấy một mảnh giấy và viết ra các giá trị của hàm f (l, r) cho tất cả l, r. Bây giờ
anh ta muốn biết, cuối cùng anh ta có bao nhiêu giá trị riêng biệt.
Bạn hãy giúp An, đếm số lượng giá trị riêng biệt của hàm f (l, r) cho dãy a đã cho.
Biểu thức x | y có nghĩa là áp dụng hoạt động của bitwise OR cho các số x và y.
Dữ liệu vào: Vào từ file văn bản OR.INP
- Dòng đầu tiên chứa số nguyên n (1≤ n ≤ 105) – là số phần tử của dãy a.
- Dòng thứ hai chứa n số nguyên a1, a2, ..., an (0 ≤ ai ≤ 106) - các phần tử của dãy a.
Dữ liệu ra: Từ file văn bản OR.OUT
In một số nguyên duy nhất - số lượng giá trị riêng biệt của hàm f (l, r) cho dãy a đã
cho.
Ví dụ:
OR.INP OR.OUT
3 4
120
10 11
1 2 3 4 5 6 7 8 9 10
Giải thích:
Trong ví dụ đầu tiên, An sẽ có 6 số được viết trên giấy: f (1, 1) = 1, f (1, 2) = 3, f (1,
3) = 3, f (2, 2) = 2 , f (2, 3) = 2, f (3, 3) = 0. Có chính xác 4 số khác nhau trong số chúng:
0, 1, 2, 3.

You might also like