| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Bài 1: Đếm từ (TS10 Tân Khoa thi thử lần 5 - 2026) | 25 (p) | 0.5s | 512M |
| 2 | Bài 2. Trái hay phải? (TS10 Tân Khoa thi thử lần 5 - 2026) | 25 (p) | 1.0s | 512M |
| 3 | Bài 3. Số hoàn hảo (TS10 Tân Khoa thi thử lần 5 - 2026) | 25 (p) | 1.0s | 512M |
| 4 | Bài 4. Chuẩn bị quà (TS10 Tân Khoa thi thử lần 5 - 2026) | 25 (p) | 1.0s | 1G |
Trong một xâu ký tự chỉ gồm các ký tự chữ cái và các dấu cách, một từ được định nghĩa là một đoạn liên tiếp chỉ có các ký tự chữ cái nằm ở đầu hoặc cuối xâu hoặc giữa hai dấu cách. Ví dụ, xâu tuyen sinh lop muoi có \(4\) từ: tuyen, sinh, lop, muoi.
Trong lúc làm bài tập ở trường, bạn An viết một hàm countingWords bằng các ngôn ngữ Python, C++ và Pascal để đếm số từ có trong một xâu ký tự \(s\). Các hàm này có logic giống hệt nhau, chỉ khác ở ngôn ngữ lập trình. Dưới đây là hàm mà bạn An đã viết ở các ngôn ngữ:
def countingWords (s):
wordCount = 1
for i in range (len(s)):
if s[i] == ' ':
wordCount += 1
return wordCount
int countingWords (string s)
{
int wordCount = 1;
for (int i = 0; i < s.size (); i ++)
if (s[i] == ' ')
wordCount ++;
return wordCount;
}
function countingWords (s: string): integer;
var i, wordCount: integer;
begin
wordCount := 1;
for i := 1 to length(s) do
begin
if s[i] = ' ' then
wordCount := wordCount + 1;
end;
countingWords := wordCount;
end;
Khi bạn An nộp các hàm này lên hệ thống chấm bài, bạn đã nhận kết quả không chính xác ở một số xâu \(s\). Để kiểm tra lại bài làm của mình, bạn An đã đưa ra một xâu \(s\) và yêu cầu bạn kiểm tra xem kết quả mà hàm của bạn An trả về với dữ liệu là xâu \(s\) có đúng hay không. Bạn hãy giúp bạn An hoàn thành bài tập nhé.
Correct! nếu hàm của bạn An đếm đúng số từ trong xâu \(s\), ngược lại in ra Incorrect!.Test 1
ts lop muoi
Correct!
Hàm của bạn An đã đếm đúng số từ trong xâu \(s\) là \(3\) từ.
Ở một sự kiện về Tin học dành cho học sinh, Ban tổ chức đã xếp \(n\) cái ghế thành một vòng tròn. Các ghế được đánh số từ \(1\) đến \(n\) theo chiều kim đồng hồ, tạo thành một vòng lặp \(1 \to 2 \to 3 \to \dots \to n \to 1 \to 2 \to \dots\)
Có \(m\) bạn học sinh tham dự sự kiện. Bạn học sinh thứ \(i\) ngồi vào ghế được đánh số \(a_i\). Khoảng cách giữa hai bạn học sinh có thể được tính theo hướng xuôi chiều kim đồng hồ hoặc ngược chiều kim đồng hồ, và bằng số lượng ghế giữa hai bạn học sinh theo hướng đó cộng thêm \(1\). Ví dụ, nếu ban tổ chức chuẩn bị \(5\) cái ghế và \(2\) bạn học sinh An và Bình lần lượt ngồi ở các ghế số \(2\) và \(4\), khoảng cách giữa hai bạn sẽ được tính như sau:
Lưu ý rằng khoảng cách theo chiều kim đồng hồ từ An đến Bình là khoảng cách ngược chiều kim đồng hồ từ Bình đến An, và ngược lại.
Một bạn học sinh A được gọi là ngồi bên trái một bạn học sinh B, nếu khoảng cách theo chiều kim đồng hồ từ A đến B nhỏ hơn khoảng cách ngược chiều kim đồng hồ từ A đến B. Ngược lại, nếu khoảng cách theo chiều kim đồng hồ từ A đến B lớn hơn khoảng cách ngược chiều kim đồng hồ từ A đến B thì A được gọi là ngồi bên phải B. Nếu hai khoảng cách bằng nhau, ta nói A ngồi đối diện B. Trong ví dụ trên:
Sau khi ổn định chỗ ngồi, mỗi bạn học sinh tham dự sự kiện được yêu cầu đếm số lượng bạn học sinh ngồi bên trái và bên phải mình. Bạn hãy viết một chương trình tính ra kết quả chính xác mà mỗi bạn cần đưa ra để Ban tổ chức đối chiếu.
Test 1
5 2
2 4
0 1
1 0
Đây chính là ví dụ được nêu trên đề bài, với bạn học sinh thứ nhất là An (\(a_1 = 2\)) và bạn học sinh thứ hai là Bình (\(a_2 = 4\)).
Hôm nay ở trường bạn An đã học về số hoàn hảo. Số hoàn hảo được định nghĩa như sau:
Định nghĩa số hoàn hảo: Một số nguyên dương \(n\) được gọi là hoàn hảo khi và chỉ khi tổng các ước nguyên dương của \(n\) đúng bằng \(2n\).
Bạn An viết một hàm isPerfect bằng các ngôn ngữ Python, C++ và Pascal kiểm tra một số nguyên dương \(n\) có phải là một số hoàn hảo hay không. Các hàm này có logic giống hệt nhau, chỉ khác ở ngôn ngữ trình bày. Dưới đây là hàm mà bạn An đã viết ở các ngôn ngữ:
def isPerfect (n):
sumDivisor = 0
for i in range (1, n + 1):
if n % i == 0:
sumDivisor += i
if int (sumDivisor / n) == 2:
return True;
else:
return False;
bool isPerfect (long long n) {
long long sumDivisor = 0;
for (long long i = 1; i <= n; i++) {
if (n % i == 0)
sumDivisor += i;
}
if ((long long)(sumDivisor / n) == 2)
return true;
else
return false;
}
Khi bạn An nộp các hàm này lên hệ thống chấm bài, bạn đã nhận kết quả không chính xác ở một số giá trị \(n\). An biết rằng hệ thống đã kiểm tra bài nộp của mình với các giá trị \(n\) ngẫu nhiên không nhỏ hơn \(l\) và không lớn hơn \(r\), nhưng không biết cụ thể là những giá trị nào. Do đó, An muốn biết trong đoạn \([l, r]\) có thể có bao nhiêu giá trị \(n\) có thể được chọn để các hàm của An cho ra kết quả không chính xác với định nghĩa số hoàn hảo. Các bạn hãy tính toán giúp An nhé.
Test 1
1 10
0
Trong các số từ \(1\) đến \(10\), chỉ có \(6\) là số hoàn hảo. Hàm của bạn An cho kết quả True/true cho \(n = 6\) và cho kết quả False/false cho tất cả các giá trị \(n\) còn lại, do đó hàm của An cho kết quả chính xác với mọi \(n \le 10\).
Một mùa giáng sinh nữa lại đến cũng là lúc xưởng quà tặng của Ông già Tuyết phải hoạt động hết công suất. Ông già Tuyết đang lên kế hoạch đóng gói \(n\) món đồ chơi vào những chiếc túi thần kỳ để chuẩn bị đem phân phát cho trẻ em trên toàn thế giới.
Các món đồ chơi được xếp trên băng chuyền theo thứ tự từ \(1\) đến \(n\), món đồ chơi thứ \(i\) có độ hấp dẫn là \(a_i\). Ông già Tuyết bắt đầu gói quà bằng cách đặt món đồ chơi đầu tiên vào túi quà thứ nhất rồi chuyển sang món đồ chơi tiếp theo. Với món đồ chơi thứ \(i\) (\(2 \le i \le n\)), Ông già Tuyết có hai lựa chọn:
Như vậy, sau khi đóng gói tất cả các món đồ chơi, Ông già Tuyết thu được một dãy các túi quà, mỗi túi quà gồm một nhóm các món đồ chơi liên tiếp trên băng chuyền.
Là một người am hiểu trẻ em, Ông già Tuyết biết rằng khi một đứa trẻ nhận được một túi quà, chúng chỉ quan tâm đến món đồ chơi có độ hấp dẫn lớn nhất trong túi quà đó, do đó độ hấp dẫn của một túi quà có thể được tính bằng độ hấp dẫn lớn nhất của các món đồ chơi trong túi quà đó. Để tiện cho việc chia những túi quà cho những đứa trẻ, Ông già Tuyết muốn độ hấp dẫn của các túi quà tạo thành một dãy không giảm, nghĩa là độ hấp dẫn của túi quà thứ \(i\) phải lớn hơn hoặc bằng túi quà thứ \(i - 1\).
Ví dụ, với các món đồ chơi có độ hấp dẫn lần lượt là \(1, 5, 3, 6\), Ông già Tuyết có thể có các phương án đóng gói hợp lệ như sau:
Một phương án đóng gói không hợp lệ là \((1), (5), (3), (6)\) vì túi thứ \(3\) có độ hấp dẫn là \(3\), nhỏ hơn túi thứ \(2\) có độ hấp dẫn là \(5\).
Ông già Tuyết muốn tính toán số cách đóng gói hợp lệ cho \(n\) món quà. Ngoài ra, để thỏa mãn trí tò mò, Ông già Tuyết còn có \(q\) câu hỏi, với mỗi câu hỏi ông muốn biết số cách đóng gói hợp lệ nếu giả sử chỉ có những món quà từ \(l\) đến \(r\) trên băng chuyền. Các bạn hãy giúp Ông già Tuyết trả lời các câu hỏi nhé.
Test 1
3 2
1 3 2
1 2
2 3
2
2
1
Nếu đóng gói cả \(n\) món đồ chơi trên băng chuyền, Ông già Tuyết có 2 cách chia như sau:
Với câu hỏi thứ nhất (\(l=1, r=2\)), Ông già Tuyết có 2 cách đóng gói thỏa mãn: \((1, 3)\) và \((1), (3)\).
Với câu hỏi thứ hai (\(l=2, r=3\)), Ông già Tuyết chỉ có 1 cách đóng gói thỏa mãn là \((3, 2)\).