A. [GCC TRAINING 2026 — PRACTICE 1] Chữ Hoa chữ thường
Ý Tưởng
- Trong bảng mã ASCII, các chữ cái in thường ('a' đến 'z') và các chữ cái in hoa ('A' đến 'Z') được sắp xếp liên tiếp nhau.
- Khoảng cách giữa chữ thường và chữ hoa tương ứng luôn là một hằng số: 'a' — 'A' = 32.
- Do đó, để chuyển một ký tự thường c thành ký tự hoa, ta chỉ cần:
- Lấy c — 32 (hoặc trừ đi 'a' — 'A').
Code
B. [GCC TRAINING 2026 — PRACTICE 1] Tính tiền mua hàng
Ý Tưởng
- Tổng số tiền cần thanh toán là tích giữa đơn giá và số lượng: $$$\text{Tổng tiền} = p \times n$$$.
- Vì $$$p$$$ là số thực nên ta dùng kiểu dữ liệu
double, còn $$$n$$$ là số nguyên dùng kiểuint. - Để in ra chính xác $$$2$$$ chữ số thập phân sau dấu phẩy trong C++, ta sử dụng
fixedkết hợp vớisetprecision(2)từ thư viện<iomanip>. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
C. [GCC TRAINING 2026 — PRACTICE 1] Làm tròn số
Ý Tưởng
- Đề bài yêu cầu tìm hai số nguyên:
- Số nguyên lớn nhất bé hơn hoặc bằng $$$x$$$: Đây chính là định nghĩa của hàm sàn (floor), ký hiệu là $$$\lfloor x \rfloor$$$. Trong C++, ta dùng hàm
floor(x)từ thư viện<cmath>. - Số nguyên nhỏ nhất lớn hơn $$$x$$$: Lưu ý điều kiện là lớn hơn hẳn ($$$ \gt x$$$), không phải lớn hơn hoặc bằng ($$$\ge x$$$).
- Ta xét số nguyên nhỏ nhất lớn hơn hoặc bằng $$$x$$$ chính là hàm trần (ceiling) $$$\lceil x \rceil$$$, tương ứng với hàm
ceil(x). - Nếu $$$x$$$ là số nguyên (ví dụ $$$x = 3.0$$$): Số nhỏ nhất lớn hơn $$$x$$$ phải là $$$x + 1$$$ (tức là $$$4$$$). Khi đó
floor(x) = 3, còn số tiếp theo làfloor(x) + 1 = 4. - Nếu $$$x$$$ không phải số nguyên (ví dụ $$$x = 3.2$$$):
floor(x) = 3, và số nguyên nhỏ nhất lớn hơn $$$x$$$ là $$$\lceil x \rceil = 4$$$. - Như vậy, trong mọi trường hợp, số thứ hai luôn bằng
floor(x) + 1.
- Ta xét số nguyên nhỏ nhất lớn hơn hoặc bằng $$$x$$$ chính là hàm trần (ceiling) $$$\lceil x \rceil$$$, tương ứng với hàm
- Vì yêu cầu in theo thứ tự tăng dần, kết quả luôn là
floor(x)vàfloor(x) + 1(ép về kiểu số nguyênlong longđể in không bị dính phần thập phân). - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
D. [GCC TRAINING 2026 — PRACTICE 1] Tính toán cơ bản
Ý Tưởng
- Bài toán yêu cầu tính toán và in ra $$$7$$$ kết quả lần lượt trên từng dòng:
- Tổng: $$$A + B$$$
- Hiệu: $$$A - B$$$
- Tích: $$$A \times B$$$
- Thương: $$$A / B$$$ (thực hiện phép chia số nguyên lấy phần nguyên)
- Chia dư: $$$A \pmod B$$$
- $$$A^3 = A \times A \times A$$$
- $$$B^3 = B \times B \times B$$$
- Lưu ý về kiểu dữ liệu:
- Vì $$$A, B \le 10^6$$$, khi tính $$$A \times B$$$ giá trị có thể đạt tới $$$10^{12}$$$, và $$$A^3, B^3$$$ có thể đạt tới $$$10^{18}$$$.
- Do đó, nếu dùng kiểu
intthông thường (chỉ chứa tối đa khoảng $$$2 \times 10^9$$$) sẽ bị tràn số. Bắt buộc phải khai báo $$$A$$$ và $$$B$$$ bằng kiểulong long. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
E. [GCC TRAINING 2026 — PRACTICE 1] Đấu bài Magic 1
Ý Tưởng
- Bài toán yêu cầu so sánh giữa chỉ số tấn công của Lộc ($$$A$$$) và chỉ số phòng thủ của Kỳ ($$$D$$$).
- Theo quy tắc giao chiến giữa quái thú tấn công và quái thú phòng thủ:
- Nếu $$$A \gt D$$$: Quái thú của Kỳ bị tiêu diệt $$$\to$$$ In ra
YASS. - Nếu $$$A \le D$$$: Quái thú của Kỳ không bị tiêu diệt $$$\to$$$ In ra
NO. - Vì giới hạn $$$0 \le A, D \le 10000$$$, ta chỉ cần dùng kiểu dữ liệu số nguyên cơ bản
intvà một câu lệnh điều kiệnif-elseđơn giản. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
F. [GCC TRAINING 2026 — PRACTICE 1] Hình Chữ Nhật
Ý Tưởng
- Đề bài yêu cầu tìm độ dài cạnh còn lại của hình chữ nhật khi biết trước độ dài 3 cạnh $$$a, b, c$$$.
- Một hình chữ nhật luôn có $$$4$$$ cạnh, tạo thành $$$2$$$ cặp cạnh bằng nhau từng đôi một (hai chiều dài bằng nhau và hai chiều rộng bằng nhau).
- Khi biết $$$3$$$ cạnh $$$a, b, c$$$, chắc chắn có ít nhất $$$2$$$ cạnh có giá trị bằng nhau. Cạnh thứ ba bị lẻ ra sẽ có độ dài bằng chính cạnh thứ tư (cạnh cần tìm).
- Ta sử dụng cấu trúc rẽ nhánh
if-elseđơn giản để kiểm tra từng trường hợp: - Nếu $$$a = b$$$ thì cạnh còn lại là $$$c$$$.
- Nếu $$$a = c$$$ thì cạnh còn lại là $$$b$$$.
- Nếu $$$b = c$$$ (trường hợp còn lại) thì cạnh còn lại là $$$a$$$.
- Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
G. [GCC TRAINING 2026 — PRACTICE 1] Cuối tháng của Nam Anh Phạm
Ý Tưởng
- Bài toán yêu cầu tính tiền một lần gọi món có áp dụng giảm giá theo các ngưỡng:
- Kiểm tra tính hợp lệ của dữ liệu đầu vào:
- Nếu mã món
codekhông thuộc đoạn $$$[1, 5]$$$ hoặc số lượngquantity <= 0: in raInvalid.
- Nếu mã món
- Xác định đơn giá theo
code:- Mã 1: 50.000 đồng.
- Mã 2: 80.000 đồng.
- Mã 3: 60.000 đồng.
- Mã 4: 70.000 đồng.
- Mã 5: 40.000 đồng.
- Tính tổng tiền ban đầu: $$$\text{tổng} = \text{đơn giá} \times \text{quantity}$$$.
- Áp dụng mức giảm giá:
- Nếu $$$\text{tổng} \ge 300.000$$$: giảm 10%, số tiền còn lại là $$$\text{tổng} \times 0.9$$$ (hoặc $$$\text{tổng} \times 90 / 100$$$).
- Nếu $$$150.000 \le \text{tổng} \lt 300.000$$$: giảm 5%, số tiền còn lại là $$$\text{tổng} \times 0.95$$$ (hoặc $$$\text{tổng} \times 95 / 100$$$).
- Nếu $$$\text{tổng} \lt 150.000$$$: giữ nguyên.
- Lưu ý: Các đơn giá đều là bội của 10.000 nên khi giảm 5% hay 10% kết quả luôn là số nguyên. Ta có thể dùng phép tính số nguyên
long longđể tránh sai số dấu phẩy động. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
H. [GCC TRAINING 2026 — PRACTICE 1] Đấu Kiếm
Ý Tưởng$$$\vec{u_1} = (x_2 - x_1, y_2 - y_1) = (dx_1, dy_1)$$$ $$$\vec{u_2} = (x_4 - x_3, y_4 - y_3) = (dx_2, dy_2)$$$ $$$dx_1 \times dy_2 - dy_1 \times dx_2 = 0$$$
- Bài toán yêu cầu xác định xem hai đường thẳng (chú ý là đường thẳng vô hạn kéo dài theo hai thanh kiếm, không phải đoạn thẳng) có cắt nhau hay không.
- Hai đường thẳng trên mặt phẳng tọa độ $$$2D$$$ sẽ:
- Cắt nhau khi và chỉ khi chúng không song song với nhau (đề bài đã đảm bảo hai đường không trùng nhau).
- Song song với nhau khi và chỉ khi hai vector chỉ phương của chúng cùng phương.
- Vector chỉ phương của đường thẳng Nam Anh là:
- Vector chỉ phương của đường thẳng Đồng Hà là:
- Hai vector $$$\vec{u_1}$$$ và $$$\vec{u_2}$$$ cùng phương (tức hai đường thẳng song song) khi và chỉ khi tích chéo bằng 0:
- Do đó:
- Nếu tích chéo bằng $$$0$$$: hai đường thẳng song song (không cắt nhau) $$$\to$$$ In ra
DONG HA. - Nếu tích chéo khác $$$0$$$: hai đường thẳng cắt nhau $$$\to$$$ In ra
NAM ANH. - Lưu ý kiểu dữ liệu: Tọa độ lên tới $$$10^6$$$ nên $$$dx, dy$$$ có thể đạt $$$2 \times 10^6$$$, tích chéo có thể đạt khoảng $$$4 \times 10^{12}$$$, vì vậy cần dùng kiểu
long longđể tránh tràn số. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
J. [GCC TRAINING 2026 — PRACTICE 1] Đấu Kiếm 2
Ý Tưởng$$$t = \frac{d_{\text{thực}}}{v_{\text{thực}}}$$$
- Bài toán yêu cầu tính thời gian thực tế $$$t$$$ để viên đạn bay tới đầu Nam Anh sau khi chịu ảnh hưởng của thời tiết, sau đó so sánh với thời gian tối đa $$$s$$$:
- Ban đầu, vận tốc là $$$v$$$ và khoảng cách là $$$d$$$.
- Ảnh hưởng của thời tiết $$$w$$$:
- Nếu $$$w = \text{'S'}$$$ (Nắng): Giữ nguyên $$$v$$$ và $$$d$$$.
- Nếu $$$w = \text{'W'}$$$ (Gió): Vận tốc giảm $$$36\% \implies v_{\text{thực}} = v \times (1 - 0.36) = v \times 0.64$$$. Khoảng cách $$$d$$$ giữ nguyên.
- Nếu $$$w = \text{'F'}$$$ (Sương mù): Khoảng cách giảm $$$18\% \implies d_{\text{thực}} = d \times (1 - 0.18) = d \times 0.82$$$. Vận tốc $$$v$$$ giữ nguyên.
- Thời gian đạn bay thực tế là:
- Để hạ gục được Nam Anh, viên đạn phải đến đích trong vòng $$$s$$$ giây, tức là $$$t \le s$$$.
- Thay vì chia số thực dễ gây sai số nhỏ, ta có thể so sánh: $$$d_{\text{thực}} \le s \times v_{\text{thực}}$$$ (hoặc dùng sai số $$$\epsilon = 10^{-9}$$$ khi so sánh số thực).
- Nếu $$$t \le s$$$: Đồng Hà hạ gục thành công $$$\implies$$$ In ra
NAM ANH DA BI HA GUc. - Nếu $$$t \gt s$$$: Không hạ gục được $$$\implies$$$ In ra
NAM ANH CHUA BI Ha GUC. - Lưu ý đặc biệt: Đề bài viết hoa/thường ở xâu kết quả rất đặc trưng (
GUcvàHa GUC), cần in chính xác tuyệt đối từng ký tự. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
K. [GCC TRAINING 2026 — PRACTICE 1] Nam Anh và 2 chỗ đỗ bí ẩn
Ý Tưởng$$$\Delta = b^2 - 4ac$$$ $$$x_1 = x_2 = -\frac{b}{2a}$$$ $$$x_1 = \frac{-b - \sqrt{\Delta}}{2a}, \quad x_2 = \frac{-b + \sqrt{\Delta}}{2a}$$$
- Bài toán yêu cầu giải phương trình bậc hai $$$ax^2 + bx + c = 0$$$ với điều kiện đề bài cho trước $$$a \ne 0$$$ và phương trình luôn có nghiệm thực.
- Tính biệt thức $$$\Delta$$$ (delta):
- Vì đề bài bảo đảm luôn có nghiệm thực nên $$$\Delta \ge 0$$$. Ta xét:
- Nếu $$$\Delta == 0$$$: Phương trình có nghiệm kép:
- Nếu $$$\Delta \gt 0$$$: Phương trình có $$$2$$$ nghiệm phân biệt:
- Sắp xếp thứ tự tăng dần:
- Lưu ý mẫu số $$$2a$$$ có thể âm nếu $$$a \lt 0$$$, dẫn đến công thức trên không tự động đảm bảo $$$x_1 \le x_2$$$.
- Cách an toàn và gọn nhất là tính ra hai giá trị $$$x_1, x_2$$$, sau đó nếu $$$x_1 \gt x_2$$$ thì thực hiện đổi chỗ (
swap(x1, x2)). - Định dạng đầu ra: Dùng
fixedvàsetprecision(6)từ thư viện<iomanip>để in đúng $$$6$$$ chữ số phần thập phân. - Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code
L. [GCC TRAINING 2026 — PRACTICE 1] Tọa Độ Trạm Radar Vũ Trụ
Ý Tưởng
- Bài toán yêu cầu tính toán chỉ số năng lượng $$$P$$$ theo chế độ quét
typevà xác định trạng thái cảnh báo của trạm chỉ huy:
- Kiểm tra
typehợp lệ:- Nếu
type$$$\notin {1, 2, 3, 4}$$$: In raINVALID TYPEvà kết thúc chương trình.
- Nếu
- Tính giá trị $$$P$$$ theo
type:type == 1: $$$P = \sqrt{x_0^2 + y_0^2}$$$ (Khoảng cách Euclid).type == 2: $$$P = \vert{}x_0\vert{} + \vert{}y_0\vert{}$$$ (Khoảng cách Manhattan).type == 3: $$$P = \frac{x_0^2 + y_0^2}{\vert{}x_0 - y_0\vert{} + 1}$$$.type == 4: $$$P = \sqrt[3]{\vert{}x_0^3 - y_0^3\vert{}}$$$. Trong C++, ta dùng hàm căn bậc bacbrt(abs(x0*x0*x0 - y0*y0*y0))hoặc tính lũy thừa quadouble.
- Lưu ý về kiểu dữ liệu và tràn số:
- Tọa độ $$$-10^6 \le x_0, y_0 \le 10^6$$$, nên $$$x_0^2, y_0^2$$$ có thể đạt $$$10^{12}$$$, và $$$x_0^3, y_0^3$$$ có thể đạt tới $$$10^{18}$$$. Cần dùng kiểu
doublehoặc ép sang số thực/long longtrước khi tính toán để tránh tràn số nguyên.
- Tọa độ $$$-10^6 \le x_0, y_0 \le 10^6$$$, nên $$$x_0^2, y_0^2$$$ có thể đạt $$$10^{12}$$$, và $$$x_0^3, y_0^3$$$ có thể đạt tới $$$10^{18}$$$. Cần dùng kiểu
- Xác định trạng thái cảnh báo theo thứ tự ưu tiên:
- Nếu $$$x_0 = 0$$$ và $$$y_0 = 0$$$: In ra
BASE DEFENSE. - Ngược lại:
- Nếu $$$P \lt 100$$$: In ra
SAFE. - Nếu $$$100 \le P \le 10^6$$$: In ra
WARNING. - Nếu $$$P \gt 10^6$$$: In ra
DANGER.
- Nếu $$$x_0 = 0$$$ và $$$y_0 = 0$$$: In ra
- Định dạng đầu ra:
- Dòng 1: In giá trị $$$P$$$ làm tròn chính xác 2 chữ số thập phân (
fixed,setprecision(2)). - Dòng 2: In chuỗi trạng thái cảnh báo tương ứng.
- Dòng 1: In giá trị $$$P$$$ làm tròn chính xác 2 chữ số thập phân (
- Độ phức tạp thời gian: $$$O(1)$$$.
- Độ phức tạp không gian: $$$O(1)$$$.
Code




