Tổng Hợp Các Hàm Python “Cốt Lõi” Khi Thi HSG Tỉnh Và Vào 10 Chuyên Tin ( Mới Nhất – Chọn Lọc – Cập Nhật Thường Xuyên )
Cập nhật mới nhất ngày 25/1/2026
Trong các kỳ thi học sinh giỏi Tin học cấp huyện – cấp tỉnh và thi tuyển sinh vào lớp 10 chuyên Tin, Python là ngôn ngữ được sử dụng rất phổ biến. Tuy nhiên, đề thi không yêu cầu viết code dài, mà yêu cầu:
Nắm chắc hàm chuẩn
Biết áp dụng nhanh đúng chỗ
Tối ưu tư duy + thời gian làm bài
Bài viết này tổng hợp đầy đủ các hàm Python “xương sống” thường xuất hiện trong đề thi tỉnh và đề thi chuyên, được chia theo nhóm bài toán, kèm ví dụ sát đề thật.
Tác giả: [Thầy Tấn Dân]
Chuyên mục: Lập trình thi đấu Python cấp Tỉnh, Ôn thi Chuyên Tin.
Trong những năm gần đây, Python đã trở thành ngôn ngữ được cho phép và ưa chuộng trong các kỳ thi Học sinh giỏi (HSG) cấp Tỉnh và thi vào lớp 10 Chuyên Tin nhờ cú pháp ngắn gọn. Tuy nhiên, tốc độ thực thi của Python chậm hơn C++. Để bù đắp điều này, việc nắm vững các hàm có sẵn (built-in functions) và các thư viện chuẩn là chìa khóa để code nhanh hơn và tối ưu thời gian chạy (Time Limit).
Bài viết này sẽ tổng hợp “kho vũ khí” các hàm Python quan trọng nhất giúp bạn chinh phục các bài toán xử lý chuỗi, số học và cấu trúc dữ liệu.
1. Tăng Tốc Nhập/Xuất Dữ Liệu (Fast I/O)
Trong các bài thi, dữ liệu đầu vào có thể lên tới $10^5$ hoặc $10^6$ dòng. Hàm input() thông thường có thể khiến bạn bị lỗi TLE (Time Limit Exceeded).
Hãy sử dụng sys.stdin:
Python
import sys
# Thay thế input() bằng sys.stdin.readlineinput = sys.stdin.readline
# Đọc mảng số nguyên trên một dòng
a = list(map(int, input().split()))
Lưu ý: Khi dùng sys.stdin.readline, chuỗi nhận được sẽ kèm theo ký tự xuống dòng \n. Bạn có thể cần dùng .strip() để loại bỏ nó.
2. Các Hàm Xử Lý Chuỗi (String Manipulation)
Đề thi cấp Tỉnh và vào 10 thường xuyên có bài tập xử lý xâu. Python là “vua” ở mảng này.
Cắt và Gộp Chuỗi
s.split(): Tách chuỗi thành list (mặc định tách theo khoảng trắng).
" ".join(list): Gộp list thành chuỗi.
Tìm Kiếm và Thay Thế
s.find(sub): Trả về chỉ số đầu tiên tìm thấy, nếu không có trả về -1.
s.count(sub): Đếm số lần xuất hiện của chuỗi con.
s.replace(old, new): Thay thế chuỗi con.
Kỹ Thuật Slicing (Cắt lát)
Đây là kỹ thuật cực mạnh của Python:
s[::-1]: Đảo ngược chuỗi (Cực hay dùng để kiểm tra số Palindrome).
s[start:end:step]: Cắt chuỗi linh hoạt.
3. Thư Viện Toán Học (math)
Đừng tự viết hàm tính toán nếu Python đã có sẵn, vì hàm của thư viện C-based chạy nhanh hơn nhiều.
Python
import math
math.gcd(a, b): Tìm ước chung lớn nhất (UCLN).
math.lcm(a, b): Tìm bội chung nhỏ nhất (BCNN) (Lưu ý: Chỉ có từ Python 3.9 trở lên).
math.isqrt(n): Tính căn bậc 2 nguyên (trả về phần nguyên), nhanh và chính xác hơn int(math.sqrt(n)) với số lớn.
math.ceil(x) / math.floor(x): Làm tròn lên / xuống.
math.factorial(n): Tính giai thừa $n!$.
4. Xử Lý Danh Sách (List) & Sắp Xếp
Sắp xếp (Sorting) là bài toán kinh điển. Python sử dụng thuật toán Timsort với độ phức tạp $O(N \log N)$.
Hàm Sắp Xếp
a.sort(): Sắp xếp trực tiếp trên list a (làm thay đổi a).
sorted(a): Trả về một list mới đã sắp xếp, giữ nguyên a.
Thay vì dùng vòng lặp for, hãy dùng cách này để code ngắn gọn:
Python
# Tạo mảng bình phương các số chẵn từ 0 đến 9
sq = [x**2for x inrange(10) if x % 2 == 0]
5. “Vũ Khí Bí Mật”: Thư Viện collections và itertools
Đây là phần phân loại thí sinh. Biết dùng các thư viện này sẽ giúp bạn giải quyết bài toán phức tạp trong vài dòng code.
collections.Counter (Đếm tần suất)
Giải quyết bài toán “đếm số lần xuất hiện của phần tử” trong $O(N)$.
Python
from collections import Counter
a = [1, 2, 2, 3, 1, 1]
dem = Counter(a)
print(dem[1]) # Kết quả: 3 (số 1 xuất hiện 3 lần)
print(dem.most_common(1)) # Trả về phần tử xuất hiện nhiều nhất
collections.deque (Hàng đợi hai đầu)
Dùng cho thuật toán BFS hoặc các bài toán cần thêm/xóa phần tử ở đầu mảng (List thường xóa đầu mất $O(N)$, deque chỉ mất $O(1)$).
itertools.permutations & combinations
Dùng để sinh hoán vị và tổ hợp (thay thế cho quay lui – backtracking ở các bài toán có N nhỏ).
Python
from itertools import permutations
# Sinh tất cả hoán vị của [1, 2, 3]
perms = list(permutations([1, 2, 3]))
6. Mẹo Nhỏ Nhưng “Có Võ”
Nới rộng giới hạn đệ quy: Python mặc định giới hạn độ sâu đệ quy khoảng 1000. Với các bài DFS hoặc quy hoạch động đệ quy, hãy thêm dòng này đầu file:
Python
import sys
sys.setrecursionlimit(10**6)
Sử dụng hàm set(): Để loại bỏ phần tử trùng lặp hoặc kiểm tra sự tồn tại trong $O(1)$ thay vì $O(N)$ của list.
Hàm zip(): Duyệt song song nhiều list cùng lúc.
I. Các hàm đặc biệt quan trọng – Hay ra nhất trong đề thi
1) các hàm chữ:
s=s.split() #tách các chữ mất khoản cách
s=s.split(‘,’) # tách các phần tử bởi dấu phẩy (, ) (.) (: ) tùy bài
isdigit() # các số
islower() ( chữ thường )
isupper() (chữ hoa )
sorted() ( Các từ theo thứ tự từ điển)
print(s1.count(s2)) ( điếm trong chuỗi )
s[i].isalnum() lấy kiểu chữ và số ( trừ ký tự đặc biệt )
not s[i].isalnum() lấy ký tự đặc biệt
s=’’.join(a)# chuyển mảng sang chuỗi
a=list(s) # chuyển chuỗi sang mảng
vt=c.index(Max)
vt=s.rfind(‘.’)# tìm vị trí dấu chấm cuối
vt=s.find(‘.’)# tìm vị trí đầu trong chuỗi
abs( a- b) ( hàm trị tuyệt đối)
sqrt ( a) căn bật 2 nhớ import math
BCNN=abs(a*b)/ucln(a,b) # Bội số chung lớn nhất
Ucln=math.gcd(a,b) #Ước số chung lớn nhất
print(s[0].zfill(2),’:’,s[1].zfill(2),’:’,s[2].zfill(2),sep=”)# định dạng thêm số 0 ở phía trước zfill(2) ; số 2 phần chục; 3; phần trăm; 4; phần ngàn,…
7. Kỹ Thuật Lọc Dữ Liệu Bằng “Biểu Thức Chính Quy” (Regex)
Trong đề thi, đôi khi dữ liệu vào là một xâu hỗn độn chứa cả chữ và số (ví dụ: a12b34cd56), và yêu cầu bạn tách riêng số hoặc chữ. Thay vì dùng vòng lặp for để kiểm tra từng ký tự, ta dùng thư viện re (Regular Expression).
Lấy từng số, bỏ chữ (Hoặc ngược lại)
Để sử dụng, bắt buộc phải import re.
Python
import re
s = "hoc123sinh456gioi789"# 1. Lấy số, bỏ chữ:# '[^0-9]+' nghĩa là: Những ký tự KHÔNG phải số (0-9)# Thay thế những cái không phải số bằng khoảng trắng ' ', sau đó split ra.
nums = re.sub('[^0-9]+', ' ', s).split()
# Kết quả nums: ['123', '456', '789'] (Dạng chuỗi)# 2. Lấy chữ, bỏ số:# '[^a-zA-Z]+' nghĩa là: Những ký tự KHÔNG phải chữ cái (a-z, A-Z)
words = re.sub('[^a-zA-Z]+', ' ', s).split()
# Kết quả words: ['hoc', 'sinh', 'gioi']
Tại sao nó “xịn”? Cách này xử lý được cả trường hợp số âm hoặc số thực nếu bạn chỉnh pattern một chút, và nó nhanh hơn nhiều so với việc viết hàm if kiểm tra từng ký tự.
8. Sửa Đổi và Làm Sạch Chuỗi (replace & strip)
Nhóm hàm này dùng để chuẩn hóa dữ liệu đầu vào (ví dụ: xoá khoảng trắng thừa, thay thế từ khóa).
Hàm thay thế (replace)
Dùng để thay thế tất cả các chuỗi con tìm thấy.
Python
s = " hello world "# Xóa toàn bộ khoảng trắng trong chuỗi# Kết quả: "helloworld"
clean_s = s.replace(" ", "")
# Thay thế từ
s2 = "python is hard"
s2 = s2.replace("hard", "easy")
# Kết quả: "python is easy"
Hàm cắt khoảng trắng (strip)
Rất quan trọng khi đọc dữ liệu từ input() để tránh lỗi do khoảng trắng thừa ở đầu/cuối dòng.
s.strip(): Cắt khoảng trắng 2 đầu.
s.lstrip(): Cắt bên trái (đầu dòng).
s.rstrip(): Cắt bên phải (cuối dòng).
9. Các Kỹ Thuật Sắp Xếp và Đảo Ngược
Cần phân biệt rõ giữa Sắp xếp (Sort) và Đảo ngược (Reverse).
Sắp xếp (Sort)
Đưa các phần tử về trật tự tăng dần hoặc giảm dần.
Python
a = [3, 1, 5, 2]
# Cách 1: a.sort()# Sắp xếp trực tiếp lên biến a. Không trả về dữ liệu mới.
a.sort()
print(a) # [1, 2, 3, 5]# Cách 2: sorted(a)# Trả về một list MỚI, list a cũ giữ nguyên.
b = sorted(a, reverse=True) # Sắp xếp giảm dần
print(b) # [5, 3, 2, 1]
Đảo ngược (Reverse – Slicing)
Đây không phải là sắp xếp lại giá trị, mà chỉ là lật ngược vị trí (đuôi lên đầu).
Python
s = "ABCDE"
rev_s = s[::-1]
# Kết quả: "EDCBA"
Kiểm tra đối xứng (Palindrome)
Sử dụng kỹ thuật slicing [::-1] để kiểm tra cực nhanh.
Python
defktdx(n):# Luôn chuyển về chuỗi trước khi đảo ngược
s = str(n)
return s == s[::-1]
print(ktdx(12321)) # True
print(ktdx(123)) # False
10. Tìm Giá Trị Lớn Nhất / Nhỏ Nhất (Min/Max Nâng Cao)
Ngoài việc tìm số lớn nhất/nhỏ nhất thông thường, Python cho phép tìm theo tiêu chí riêng bằng tham số key.
words = ["ha", "noi", "vietnam", "yeu"]
# Tìm chuỗi có độ dài (len) lớn nhất
longest = max(words, key=len)
print(longest) # "vietnam"# Tìm chuỗi có độ dài nhỏ nhất
shortest = min(words, key=len)
print(shortest) # "ha"
Giải thích:key=len bảo Python rằng: “Đừng so sánh chữ cái a,b,c… hãy so sánh độ dài của chúng để quyết định ai lớn nhất”.
Tổng kết nhanh các hàm cần nhớ:
Chức năng
Hàm/Cú pháp
Ghi chú
Lọc số
re.sub('[^0-9]+', ' ', s)
Cần import re
Thay thế
s.replace(old, new)
Thay thế tất cả
Cắt khoảng trắng
s.strip()
Chỉ cắt 2 đầu
Sắp xếp
a.sort() hoặc sorted(a)
sort sửa list gốc, sorted tạo list mới
Đảo ngược
s[::-1]
Dùng để kiểm tra Palindrome
Max theo dài
max(a, key=len)
Tìm chuỗi dài nhất
9) lấy điểm ra sắp xếp:
Def laydiem(s):
s=s.split()
return float(s[-1])
kq=sorted(a,key=laydiemm,reverse=True)
for i in range(len(kq)):
x=kq[i].split()
diem=float(x[-1])
x.pop(-1)
hoten=’’.join(x)
print(hoten,’%0.1f’%diem)
Nếu bạn đang ôn thi học sinh giỏi Tin học THCS cấp tỉnh Tiền Giang, đặc biệt là thi lập trình Python, thì bài viết này sinh ra là dành cho bạn.
Trong bài này, Vi Tính Tân Dân đã tổng hợp 73 đề thi HSG Tin học Python THCS cấp tỉnh Tiền Giang, kèm đáp án – code giải chi tiết – giải thích thuật toán rõ ràng, bám sát đúng cấu trúc đề thi thực tế của Sở GD&ĐT Tiền Giang.
👉 Phù hợp cho:
Học sinh lớp 6 – 9 ôn thi HSG Tin học
Học sinh luyện thi vào lớp 10 chuyên Tin
Giáo viên, phụ huynh bồi dưỡng học sinh năng khiếu Tin học
🎯 Vì sao nên luyện bộ 73 đề thi HSG Tin học Python THCS cấp tỉnh Tiền Giang này?
Không giống các bộ đề tràn lan trên mạng, bộ đề này được chọn lọc kỹ, đảm bảo:
✅ Đúng chuẩn đề thi Tin học THCS cấp tỉnh Tiền Giang ✅ Ngôn ngữ Python – đúng yêu cầu thi thực tế ✅ Có đáp án + code mẫu ✅ Giải thích tư duy thuật toán, không chỉ cho code ✅ Từ dễ → trung bình → khó, giúp nâng trình rõ rệt
👉 Rất nhiều học sinh học Python nhưng không biết ra đề thi thật trông như thế nào. Bộ đề này giúp bạn làm quen đề chuẩn – tránh bỡ ngỡ khi đi thi.
📚 Nội dung chính trong 73 đề thi HSG Tin học Python THCS
Bộ đề bao phủ toàn bộ kiến thức trọng tâm thường ra trong các kỳ thi HSG Tin học cấp tỉnh:
🔹 1. Xử lý số & toán học trong Python
Đọc số nguyên x từ file NUM.INP.
Duyệt hai số a và b trong phạm vi [1, x], đảm bảo a ≤ b.
Kiểm tra điều kiện a * b == x và a / b ≥ 0.5.
Nếu tìm thấy cặp (a, b) thỏa mãn, gán la_ket_doi = 1 và dừng vòng lặp.
Ghi kết quả 1 vào NUM.OUT nếu x là số kết đôi, ngược lại ghi 0.
🔹 2. Xử lý ngày tháng năm
Đọc dữ liệu từ file CUP.INP, bao gồm:
Ngày hiện tại (định dạng dd.mm.yyyy).
Số ngày cần cộng thêm.
Chuyển đổi ngày hiện tại thành kiểu datetime.
Cộng thêm số ngày vào ngày hiện tại bằng timedelta(days=so_ngay_them).
Xuất kết quả với định dạng dd.mm.yyyy ra file CUP.OUT.
🔹 3. Chuỗi ký tự (String)
Đọc dữ liệu từ file PART.INP, gồm:
n, L, R: số phần tử của mảng và khoảng cần kiểm tra.
Mảng a chứa n số nguyên.
Duyệt qua từng phần tử a[i] của mảng:
Xét các chỉ số j trong phạm vi [i+L, i+R].
Nếu a[i] == a[j] + a[j-1], tăng biến đếm và dừng kiểm tra tiếp theo.
Xuất kết quả ra file PART.OUT.
🔹 4. Xử lý Xâu
Đọc dữ liệu từ file PW.INP:
Số nguyên n là số xâu.
n xâu ký tự chứa chỉ các chữ cái thường (a-z).
Sắp xếp các xâu theo độ dài tăng dần.
Duyệt từng xâu trong danh sách:
Kiểm tra xem xâu đó có chứa tất cả các xâu khác hay không.
Nếu có, in ra xâu đó và dừng lại.
Nếu không có xâu nào phù hợp, in -1.
🔹 5. Thuật toán cơ bản – nâng cao
Đọc dữ liệu từ COVID.INP:
n: số người trên đường.
a: danh sách tọa độ của n người.
Sắp xếp danh sách tọa độ theo thứ tự tăng dần.
Tính toán khoảng cách giữa các vị trí:
Khoảng cách nhỏ nhất giữa hai người gần nhau nhất.
Khoảng cách lớn nhất giữa người đầu và người cuối.
Tính số nhóm nhiễm bệnh dựa trên khoảng cách:
Tối thiểu: nếu khoảng cách nhỏ nhất là d, thì nhóm nhiễm bệnh sẽ là (d // 2) + 1.
Tối đa: nếu khoảng cách lớn nhất là D, thì nhóm nhiễm bệnh sẽ là (D // 2) + 1.
In kết quả.
🧠 Có gì trong phần ĐÁP ÁN & CODE GIẢI?
Điểm mạnh nhất của bộ tài liệu này là không chỉ có đáp án, mà còn:
✔️ Code Python rõ ràng – đúng chuẩn thi ✔️ Có import sys, đọc ghi file đúng format đề tỉnh ✔️ Giải thích từng bước tư duy ✔️ Phân tích độ phức tạp thuật toán ✔️ Chú thích bằng tiếng Việt dễ hiểu cho học sinh THCS
👉 Phù hợp cả với:
Học sinh tự học tại nhà
Giáo viên soạn tài liệu bồi dưỡng
Phụ huynh theo dõi quá trình học của con
🏆 Lợi ích khi luyện trọn bộ 73 đề này
📌 Nắm chắc cấu trúc đề thi HSG Tin học tỉnh Tiền Giang 📌 Tăng khả năng tư duy thuật toán – không học vẹt 📌 Làm quen cách trình bày code đúng chuẩn chấm thi 📌 Tự tin khi bước vào kỳ thi chính thức 📌 Rút ngắn rất nhiều thời gian ôn tập
👉 Rất nhiều học sinh từng đạt giải cấp huyện – cấp tỉnh đã luyện theo đúng dạng đề như trong bộ này.
👨🏫 Ai nên sử dụng bộ đề này?
✔️ Học sinh THCS yêu thích Tin học ✔️ Học sinh đang học Python để thi HSG ✔️ Học sinh ôn thi vào lớp 10 chuyên Tin ✔️ Giáo viên Tin học THCS ✔️ Trung tâm bồi dưỡng học sinh giỏi Tin học
🚀 Kết luận
Bộ 73 Đề thi HSG Tin học Python THCS cấp tỉnh Tiền Giang có ĐÁP ÁN là tài liệu cực kỳ giá trị nếu bạn đang nghiêm túc theo đuổi con đường học sinh giỏi Tin học.
👉 Nếu bạn muốn:
Học đúng trọng tâm
Luyện đúng dạng đề
Hiểu bản chất thuật toán
👉 Đừng bỏ qua bộ đề này.
📌 Theo dõi vitinhtandan.com để cập nhật thêm:
Đề thi HSG Tin học mới
Code Python giải chi tiết
Tài liệu ôn thi chuyên Tin từ cơ bản đến nâng cao
ĐÁP ÁN CÂU 1: Số Kết Đôi
import sys
sys.stdin = open("NUM.INP", "r")
sys.stdout = open("NUM.OUT", "w")
# Doc so x
x = int(sys.stdin.readline().strip())
# Kiem tra so ket doi
la_ket_doi = 0
for a in range(1, x + 1):
for b in range(a, x + 1):
if a * b == x and a / b >= 0.5:
la_ket_doi = 1
break
if la_ket_doi:
break
# Ghi ket qua
print(la_ket_doi)
1️⃣ Ý tưởng thuật toán
Ta cần kiểm tra số nguyên dương x có tồn tại hai số nguyên dương a, b sao cho:
a×b=x
a≤b
a/b≥0.5
Nếu tồn tại ít nhất một cặp (a, b) thỏa mãn thì x là số kết đôi → in 1, ngược lại in 0.
2️⃣ Phân tích từng bước chương trình
🔹 Bước 1: Đọc dữ liệu
x = int(sys.stdin.readline().strip())
Đọc số nguyên dương x từ file NUM.INP.
🔹 Bước 2: Duyệt các cặp (a, b)
for a inrange(1, x + 1): for b inrange(a, x + 1):
a chạy từ 1 đến x
b chạy từ a đến x → đảm bảo a ≤ b, tránh xét trùng cặp
🔹 Bước 3: Kiểm tra điều kiện số kết đôi
if a * b == x and a / b >= 0.5:
a * b == x → (a, b) là một cặp ước của x
a / b ≥ 0.5 → đúng điều kiện đề bài
👉 Nếu thỏa mãn:
Gán la_ket_doi = 1
Dừng vòng lặp ngay (không cần xét thêm)
🔹 Bước 4: Xuất kết quả
print(la_ket_doi)
In 1 nếu x là số kết đôi
In 0 nếu không tồn tại cặp nào thỏa
3️⃣ Độ phức tạp thuật toán
⏱️ Thời gian chạy
Vòng a: chạy tối đa x lần
Với mỗi a, vòng b: chạy tối đa x − a + 1 lần
👉 Trường hợp xấu nhất:
O(x^2)
💾 Bộ nhớ sử dụng
Chỉ dùng vài biến đơn giản (x, a, b, la_ket_doi)
Không dùng mảng hay cấu trúc phức tạp
👉 Độ phức tạp bộ nhớ:
O(1)
4️⃣ Nhận xét theo góc nhìn bài thi
✔️ Thuật toán:
Dễ hiểu
Dễ cài đặt
Phù hợp mức THCS – HSG cấp huyện/tỉnh
⚠️ Nhược điểm:
Với x lớn → chạy chậm do O(x²)
👉 Trong bài thi nâng cao, có thể tối ưu bằng cách chỉ duyệt đến √x, nhưng đáp án này hoàn toàn hợp lệ nếu đề không yêu cầu tối ưu.
ĐÁP ÁN CÂU 2: Word Cup
import sys
from datetime import datetime, timedelta
sys.stdin = open("CUP.INP", "r")
sys.stdout = open("CUP.OUT", "w")
# Doc du lieu
ngay_hien_tai = sys.stdin.readline().strip()
so_ngay_them = int(sys.stdin.readline().strip())
# Chuyen doi ngay thanh doi tuong datetime
ngay_hien_tai = datetime.strptime(ngay_hien_tai, "%d.%m.%Y")
# Cong them so ngay
ngay_tuong_lai = ngay_hien_tai + timedelta(days=so_ngay_them)
# In ket qua theo dinh dang dd.mm.yyyy
print(ngay_tuong_lai.strftime("%d.%m.%Y"))
1️⃣ Ý tưởng thuật toán
Bài toán yêu cầu:
Cho một ngày hiện tại (định dạng dd.mm.yyyy)
Cho số ngày cần cộng thêm
Tính và in ra ngày tương lai sau khi cộng số ngày đó
👉 Đây là bài toán xử lý ngày tháng, cần xét đúng:
Tháng có 28, 29, 30 hay 31 ngày
Năm nhuận
➡️ Ta sử dụng thư viện datetime của Python để xử lý chính xác và gọn nhẹ.
timedelta(days=so_ngay_them) biểu diễn khoảng thời gian cần cộng
Python tự động:
Chuyển tháng
Chuyển năm
Xử lý năm nhuận
➡️ Không cần tự viết kiểm tra ngày/tháng phức tạp.
🔹 Bước 4: In kết quả đúng định dạng
print(ngay_tuong_lai.strftime("%d.%m.%Y"))
strftime chuyển datetime → chuỗi
Định dạng đúng yêu cầu đề bài: dd.mm.yyyy
3️⃣ Độ phức tạp thuật toán
⏱️ Thời gian chạy
Đọc dữ liệu: O(1)
Chuyển đổi ngày: O(1)
Cộng ngày: O(1)
In kết quả: O(1)
👉 Tổng thời gian chạy:
O(1)
💾 Bộ nhớ sử dụng
Chỉ dùng vài biến kiểu đơn giản (datetime, int)
Không dùng mảng hay vòng lặp
👉 Độ phức tạp bộ nhớ:
O(1)
4️⃣ Nhận xét theo chuẩn bài thi
✔️ Ưu điểm:
Code ngắn gọn
Chính xác tuyệt đối (kể cả năm nhuận)
Tránh lỗi khi xử lý ngày/tháng
Rất phù hợp bài thi HSG THCS
⚠️ Lưu ý:
Cách làm này phụ thuộc thư viện datetime
Nếu đề cấm dùng thư viện, phải tự xử lý ngày tháng (phức tạp hơn)
ĐÁP ÁN CÂU 3: Phần Tử Điển Hình
import sys
sys.stdin = open("PART.INP", "r")
sys.stdout = open("PART.OUT", "w")
# Doc du lieu
n, L, R = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
# Dem so phan tu dien hinh
dem = 0
for i in range(n):
for j in range(i + L, min(i + R + 1, n)): # Xet cac khoang tu L den R
if a[i] == a[j] + a[j - 1]:
dem += 1
break # Neu da la phan tu dien hinh thi khong xet tiep
# In ket qua
print(dem)
1️⃣ Ý tưởng thuật toán
Bài toán cho:
Số phần tử n
Hai số nguyên L, R
Mảng số nguyên a[0…n-1]
Một phần tử điển hình tại vị trí i là phần tử thỏa mãn:
∃ j sao cho i+L≤j≤i+R vaˋ a[i]=a[j]+a[j−1]\exists\ j \ \text{sao cho} \ i + L \le j \le i + R \ \text{và} \ a[i] = a[j] + a[j-1]∃jsao choi+L≤j≤i+Rvaˋa[i]=a[j]+a[j−1]
👉 Nhiệm vụ: đếm số phần tử điển hình trong mảng.
2️⃣ Phân tích từng bước chương trình
🔹 Bước 1: Đọc dữ liệu
n, L, R = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
n: số phần tử của mảng
L, R: giới hạn khoảng xét
a: mảng gồm n số nguyên
🔹 Bước 2: Khởi tạo biến đếm
dem = 0
Biến dem dùng để đếm số phần tử điển hình.
🔹 Bước 3: Duyệt từng phần tử a[i]
for i inrange(n):
Xét từng vị trí i trong mảng làm ứng viên phần tử điển hình.
🔹 Bước 4: Duyệt các chỉ số j phù hợp
for j inrange(i + L, min(i + R + 1, n)):
j ≥ i + L
j ≤ i + R
j < n (tránh vượt chỉ số mảng)
👉 Đảm bảo đúng điều kiện đề bài.
🔹 Bước 5: Kiểm tra điều kiện điển hình
if a[i] == a[j] + a[j - 1]:
Nếu tồn tại ít nhất một j thỏa mãn thì:
a[i] là phần tử điển hình
Tăng biến đếm
Dừng vòng lặp j (không cần xét thêm)
dem += 1 break
🔹 Bước 6: In kết quả
print(dem)
In ra số lượng phần tử điển hình tìm được.
3️⃣ Độ phức tạp thuật toán
⏱️ Thời gian chạy
Vòng ngoài: chạy n lần
Vòng trong: tối đa R − L + 1 lần
👉 Trường hợp xấu nhất:
O(n×(R−L))\boxed{O(n \times (R – L))}O(n×(R−L))
Nếu R − L gần n:
O(n2)
💾 Bộ nhớ sử dụng
Mảng a kích thước n
Một vài biến đơn giản
👉 Độ phức tạp bộ nhớ:
O(n)
4️⃣ Nhận xét theo chuẩn bài thi
✔️ Ưu điểm:
Code rõ ràng, dễ hiểu
Xử lý đúng yêu cầu đề bài
Có break giúp giảm thời gian chạy khi đã thỏa điều kiện
⚠️ Nhược điểm:
Với n lớn và R − L lớn → chương trình có thể chậm
Chưa tối ưu cho dữ liệu rất lớn
👉 Tuy nhiên, rất phù hợp với đề HSG THCS nếu không yêu cầu tối ưu cao.
5️⃣ Gợi ý nâng cao (không bắt buộc)
Có thể tối ưu bằng bảng băm (dict) để tra nhanh tổng a[j] + a[j-1]
Hoặc tiền xử lý các cặp tổng liên tiếp
ĐÁP ÁN CÂU 4: Đặt Lại Mật Khẩu
📌 Ví dụ trong đề
Input
2 4
abac
zbab
Một output hợp lệ
abab
✔ So với abac → khác 1 vị trí ✔ So với zbab → khác 1 vị trí
🎯 Ghi nhớ để đi thi
Đây là bài sinh – kiểm tra, không phải DP
Mẹo quan trọng: neo theo 1 xâu
Rất hay ra trong đề HSG / chuyên Tin
import sys
sys.stdin = open("PW.INP", "r")
sys.stdout = open("PW.OUT", "w")
# Đọc n và m
n, m = map(int, sys.stdin.readline().split())
# Đọc các xâu
S = [sys.stdin.readline().strip() for _ in range(n)]
# Xâu gốc
base = S[0]
# Hàm kiểm tra xâu P có hợp lệ không
def hop_le(P):
for s in S:
dem = 0
for i in range(m):
if s[i] != P[i]:
dem += 1
if dem > 1:
return False
return True
# Thử xâu base trước
if hop_le(base):
print(base)
sys.exit()
# Thử thay đổi từng vị trí
for i in range(m):
for c in range(ord('a'), ord('z') + 1):
if chr(c) != base[i]:
P = base[:i] + chr(c) + base[i+1:]
if hop_le(P):
print(P)
sys.exit()
# Không có lời giải
print(-1)
🔍 Phân tích đề bài (hiểu cho đúng)
Có n xâuS1, S2, …, Sn
Mỗi xâu độ dài m (m ≤ 10)
Cần tìm xâu P độ dài m sao cho:
👉 Với mỗi xâu Si, số vị trí khác nhau giữa Si và P KHÔNG QUÁ 1 Tức là:
P giống hoàn toàn Si (0 vị trí khác) ✅
hoặc chỉ khác đúng 1 vị trí ✅
nếu khác ≥ 2 vị trí ❌ (không hợp lệ)
📌 Nếu có nhiều xâu P thỏa → in bất kỳ
📌 Nếu không có → in -1
🧠 Ý tưởng giải (rất quan trọng)
Nhận xét mấu chốt
m rất nhỏ (≤ 10)
Ký tự chỉ từ 'a' đến 'z'
➡️ Ta thử sinh xâu P từ một xâu gốc (ví dụ S1) bằng cách:
Giữ nguyên S1
Hoặc đổi 1 vị trí của S1 sang chữ khác (a..z)
💡 Lý do:
Nếu tồn tại P hợp lệ, thì P phải giống ít nhất một xâu cho trước ở hầu hết vị trí
Thử từ S1 là đủ (kỹ thuật “neo” – rất hay ra thi)
🧪 Cách kiểm tra một xâu P có hợp lệ không
Với mỗi xâu Si:
Đếm số vị trí j sao cho Si[j] != P[j]
Nếu > 1 → P không hợp lệ
Nếu tất cả đều ≤ 1 → chấp nhận
🧩 Thuật toán
Đọc n, m và danh sách xâu
Lấy xâu gốc S0
Tạo danh sách ứng viên P:
Chính S0
Với mỗi vị trí i:
Thử thay S0[i] bằng mọi chữ 'a'..'z'
Với mỗi P:
Kiểm tra với tất cả Si
Nếu hợp lệ → in P và kết thúc
Nếu hết mà không có → in -1
⏱ Độ phức tạp
Số ứng viên ≤ 1 + 26 * m ≈ 261
Mỗi ứng viên kiểm tra n * m
➡️ O(26 · m · n · m) Với m ≤ 10 → chạy rất nhanh, an toàn thi tỉnh 👍
ĐÁP ÁN CÂU 5: Sự Lây Lan Covid-19
import sys
sys.stdin = open("COVID.INP", "r")
sys.stdout = open("COVID.OUT", "w")
# Doc du lieu
n = int(sys.stdin.readline().strip())
a = list(map(int, sys.stdin.readline().split()))
# Sap xep cac vi tri theo thu tu tang dan
a.sort()
# Tinh khoang cach giua cac vi tri va tim khoang cach nho nhat, lon nhat
min_dist = min(a[i + 1] - a[i] for i in range(n - 1)) # Khoang cach nho nhat giua hai nguoi
max_dist = a[-1] - a[0] # Khoang cach xa nhat giua nguoi dau va nguoi cuoi
# So nhom nhiem benh toi thieu la 1, toi da la so nguoi vi tat ca deu cach xa nhau
print(min_dist // 2 + 1, max_dist // 2 + 1)
1️⃣ Ý tưởng thuật toán
Bài toán cho:
n: số người
Mảng a[]: vị trí của từng người trên một trục thẳng
Giả sử virus lây lan theo khoảng cách, mỗi người nhiễm có thể lây trong một phạm vi nhất định. Ta cần xác định:
Số nhóm nhiễm tối thiểu
Số nhóm nhiễm tối đa
Dựa trên khoảng cách giữa các vị trí của những người.
2️⃣ Phân tích từng bước chương trình
🔹 Bước 1: Đọc dữ liệu
n = int(sys.stdin.readline().strip())
a = list(map(int, sys.stdin.readline().split()))
n: số người
a: danh sách vị trí của các người
🔹 Bước 2: Sắp xếp các vị trí
a.sort()
Đưa các vị trí về thứ tự tăng dần
Giúp việc tính khoảng cách giữa những người liền kề trở nên đơn giản
🔹 Bước 3: Tính khoảng cách nhỏ nhất và lớn nhất
min_dist = min(a[i + 1] - a[i] for i inrange(n - 1))
Tính khoảng cách nhỏ nhất giữa hai người đứng gần nhau nhất
Đây là tình huống lây lan mạnh nhất → số nhóm ít nhất
max_dist = a[-1] - a[0]
Khoảng cách giữa người đứng đầu và người đứng cuối
Đây là tình huống lây lan yếu nhất → số nhóm nhiều nhất
🔹 Bước 4: Tính số nhóm nhiễm bệnh
print(min_dist // 2 + 1, max_dist // 2 + 1)
Giải thích công thức:
Mỗi nhóm lây lan chiếm bán kính 1 đơn vị về mỗi phía
Hai người cách nhau d sẽ tạo khoảng trống lây nhiễm là d // 2
Cộng thêm 1 là nhóm ban đầu
👉 In ra:
Số nhóm nhiễm tối thiểu
Số nhóm nhiễm tối đa
3️⃣ Độ phức tạp thuật toán
⏱️ Thời gian chạy
Sắp xếp mảng a:
O(nlogn)O(n \log n)O(nlogn)
Duyệt tính min_dist:
O(n)O(n)O(n)
👉 Tổng thời gian chạy:
O(nlogn)\boxed{O(n \log n)}O(nlogn)
💾 Bộ nhớ sử dụng
Lưu mảng a gồm n phần tử
Một vài biến đơn giản
👉 Độ phức tạp bộ nhớ:
O(n)\boxed{O(n)}O(n)
4️⃣ Nhận xét theo chuẩn bài thi
✔️ Ưu điểm:
Thuật toán đơn giản, hiệu quả
Không dùng vòng lặp lồng nhau
Chạy nhanh với n lớn
Rất phù hợp đề HSG THCS
✔️ Ý tưởng cốt lõi:
Chuyển bài toán lây lan → bài toán khoảng cách trên trục số
Chỉ cần xét khoảng cách nhỏ nhất và lớn nhất
5️⃣ Đánh giá tổng quát
Tiêu chí
Nhận xét
Độ đúng
✅ Chính xác
Tốc độ
⚡ Nhanh
Bộ nhớ
💾 Thấp
Phù hợp thi
🏆 Rất tốt
❓ CÂU HỎI THƯỜNG GẶP – 73 ĐỀ THI HSG TIN HỌC PYTHON THCS TIỀN GIANG
1. Bộ 73 đề thi HSG Tin học Python THCS cấp tỉnh Tiền Giang phù hợp cho lớp mấy?
Bộ 73 đề thi HSG Tin học Python THCS cấp tỉnh Tiền Giang phù hợp cho học sinh lớp 6, 7, 8 và 9, đặc biệt là học sinh đang ôn thi học sinh giỏi Tin học cấp huyện, cấp tỉnh và học sinh luyện thi vào lớp 10 chuyên Tin.
2. Các đề thi có đúng chuẩn cấu trúc đề thi tỉnh Tiền Giang không?
Có. Toàn bộ đề được chọn lọc và biên soạn dựa trên cấu trúc đề thi thực tế của Sở GD&ĐT Tiền Giang, đảm bảo sát đề thi thật, giúp học sinh không bị bỡ ngỡ khi đi thi.
3. Bộ đề có kèm đáp án và code Python chi tiết không?
Có đầy đủ. Mỗi đề đều có:
Đáp án chính xác
Code Python hoàn chỉnh
Giải thích tư duy thuật toán
Cách đọc – ghi file đúng chuẩn đề thi HSG Tin học THCS
4. Code Python trong bộ đề có phù hợp với bài thi chính thức không?
Hoàn toàn phù hợp. Code được viết theo chuẩn thi Tin học THCS, sử dụng:
import sys
Đọc dữ liệu từ file .INP
Ghi kết quả ra file .OUT Đúng với cách chấm bài trong các kỳ thi HSG cấp tỉnh.
5. Bộ đề này có phù hợp cho người mới học Python không?
Phù hợp nếu bạn đã nắm kiến thức Python cơ bản (biến, vòng lặp, điều kiện). Bộ đề được sắp xếp từ dễ → trung bình → nâng cao, giúp học sinh nâng trình từng bước, không bị quá tải.
6. Nội dung trong 73 đề thi gồm những dạng bài nào?
Bộ đề bao gồm:
Bài toán xử lý số, số nguyên tố
Mảng – danh sách – ma trận
Chuỗi ký tự
Bài toán tư duy thuật toán
Các dạng bài phân loại học sinh giỏi thường ra trong đề tỉnh
7. Giáo viên có thể dùng bộ đề này để bồi dưỡng học sinh không?
Rất phù hợp. Bộ đề là tài liệu chuẩn – đầy đủ – có lời giải chi tiết, giúp giáo viên:
Soạn bài bồi dưỡng HSG Tin học
Ra đề luyện tập
Hướng dẫn học sinh tư duy thuật toán đúng hướng
8. Luyện trọn bộ 73 đề này mang lại lợi ích gì?
Luyện đủ bộ đề giúp học sinh:
Nắm chắc dạng đề HSG Tin học Python THCS
Cải thiện tốc độ và độ chính xác khi làm bài
Hiểu rõ bản chất thuật toán
Tăng cơ hội đạt giải cấp huyện – cấp tỉnh
9. Bộ đề có cập nhật mới không?
Có. Bộ đề được chọn lọc và cập nhật, phù hợp với xu hướng ra đề mới, đúng yêu cầu Python trong chương trình THCS hiện nay.
10. Nên luyện bộ đề này như thế nào để đạt hiệu quả cao nhất?
Cách học hiệu quả nhất:
1️⃣ Làm đề không xem đáp án trước 2️⃣ Tự code và chạy thử 3️⃣ So sánh với code mẫu & cách tối ưu 4️⃣ Ghi chú lại dạng bài hay sai 5️⃣ Luyện lại sau 1–2 tuần
Tổng Hợp 74 Đề Thi Học Sinh Giỏi Tin Học THCS Cấp Tỉnh Có Đáp Án (Năm Học 2026-2027)
Kỳ thi chọn học sinh giỏi Tin học cấp THCS (đặc biệt là lớp 9) luôn là một thử thách lớn đòi hỏi sự chuẩn bị kỹ lưỡng về tư duy thuật toán và kỹ năng lập trình. Để đồng hành cùng các thầy cô giáo và các em học sinh, Vi Tính Tấn Dân xin chia sẻ bộ tài liệu “74 Đề thi học sinh giỏi Tin học THCS cấp tỉnh có đáp án” được cập nhật mới nhất cho năm học 2026-2027.
Đây là nguồn tài liệu quý giá giúp các em làm quen với cấu trúc đề thi, rèn luyện kỹ năng giải thuật trên các ngôn ngữ phổ biến như C++, Python và Pascal.
Các đề ôn thi để chuẩn bị thi Cấp Xã thì các em vào đường dẫn phía dưới để tham khảo giúp thầy nhé!
1. Tại sao bạn nên tải bộ 74 đề thi HSG Tin học này?
Khác với các tài liệu trôi nổi trên mạng, bộ sưu tập 74 đề thi này được Vi Tính Tấn Dân tổng hợp và chọn lọc kỹ càng từ các kỳ thi chính thức của nhiều tỉnh thành trên cả nước trong những năm gần đây.
Số lượng lớn: Với 74 đề thi, học sinh có thể thoả sức luyện tập từ cơ bản đến nâng cao.
Có đáp án chi tiết: Tất cả các đề đều đi kèm Test case (Input/Output) chuẩn và Code mẫu (Solution) giúp học sinh dễ dàng đối chiếu kết quả.
Cập nhật xu hướng mới: Đề thi bám sát cấu trúc ra đề của Bộ GD&ĐT và các Sở GD&ĐT trong giai đoạn 2025-2027, tập trung mạnh vào tư duy thuật toán thay vì chỉ cú pháp ngôn ngữ.
2. Cấu trúc đề thi học sinh giỏi Tin học THCS năm 2026-2027 có gì mới?
Theo xu hướng chuyển đổi số và đổi mới giáo dục, đề thi HSG Tin học cấp tỉnh hiện nay thường có cấu trúc như sau:
Thời gian làm bài: 150 phút.
Hình thức: Thi lập trình trên máy tính (chấm tự động bằng các phần mềm như Themis, CMS…).
Ngôn ngữ lập trình: Cho phép sử dụng C++ (phổ biến nhất), Python (xu hướng mới) và Free Pascal.
Các dạng bài tập thường gặp:
Bài toán số học: Tìm số nguyên tố, ước số, số hoàn hảo, xử lý số lớn…
Xử lý mảng và chuỗi: Sắp xếp, tìm kiếm, thao tác trên xâu ký tự.
Thuật toán & Quy hoạch động: Các bài toán tối ưu, bài toán cái túi, dãy con tăng dài nhất…
Hình học & Tổ hợp: Tính diện tích, đếm số phương án…
3. Review nội dung bộ đề thi
Dưới đây là tóm tắt nội dung của một số đề thi tiêu biểu có trong bộ tài liệu này:
Đề số 01: Đề thi HSG Tin học Tỉnh Tiền Giang (Năm 2021- 2022)
(Tất cả đều có code giải tham khảo bằng C++ và Python)
4. Hướng dẫn ôn thi hiệu quả với bộ tài liệu này
Để đạt kết quả cao nhất trong kỳ thi cấp tỉnh, các em học sinh nên tuân thủ lộ trình sau:
Giai đoạn 1: Tải bộ đề về và phân loại theo độ khó.
Giai đoạn 2: Tự bấm giờ làm bài giống như thi thật (không xem đáp án trước).
Giai đoạn 3: So sánh kết quả với bộ Test case.
Giai đoạn 4: Tham khảo Code mẫu để học hỏi cách viết code tối ưu, ngắn gọn và “sạch” hơn.
5. Tải xuống 74 Đề thi học sinh giỏi Tin học THCS cấp tỉnh (Full Code)
Các thầy cô và các em học sinh có thể tải trọn bộ tài liệu tại liên kết bên dưới. File nén bao gồm: File đề bài (PDF/Word), Bộ Test (Input/Output), và Code giải (CPP/PY/PAS).
Tải đề Thi Đề thi HSG Tin học THCS Python Cấp Tỉnh file PDF:
Lời kết
Hy vọng bộ tài liệu 74 đề thi học sinh giỏi Tin học THCS cấp tỉnh có đáp án 2026-2027 này sẽ là hành trang vững chắc giúp các em học sinh tự tin bước vào phòng thi và gặt hái giải cao.
Đừng quên ghé thăm Vi Tính Tấn Dân thường xuyên để cập nhật thêm nhiều tài liệu công nghệ, thủ thuật máy tính và đề thi mới nhất nhé!
Đáp Án Bài 1: Số Nguyên Tố Đầy Đủ
import sys
import math
# MỞ FILE VÀO / RA (đúng chuẩn thi)
sys.stdin = open("FULLPRIM.INP", "r")
sys.stdout = open("FULLPRIM.OUT", "w")
# Hàm kiểm tra số nguyên tố
def la_so_nguyen_to(so):
if so < 2:
return False
if so == 2:
return True
if so % 2 == 0:
return False
can_bac_hai = int(math.sqrt(so))
for uoc in range(3, can_bac_hai + 1, 2):
if so % uoc == 0:
return False
return True
# ===== CHƯƠNG TRÌNH CHÍNH =====
# Nhập số lượng phần tử
so_luong = int(input())
# Nhập dãy số
day_so = list(map(int, input().split()))
ket_qua = []
# Duyệt từng số trong dãy
for so in day_so:
if la_so_nguyen_to(so):
so_dao = int(str(so)[::-1])
if la_so_nguyen_to(so_dao):
ket_qua.append(str(so))
# Xuất kết quả
if len(ket_qua) == 0:
print(0)
else:
print(" ".join(ket_qua))
🧠 Giải thích ngắn gọn cách làm
Viết hàm la_so_nguyen_to() để kiểm tra số nguyên tố
Với mỗi số trong dãy:
Kiểm tra số đó có nguyên tố không
Đảo ngược số
Kiểm tra số đảo có nguyên tố không
Nếu cả hai đều nguyên tố → là số nguyên tố đẩy đủ
In ra danh sách kết quả, nếu không có in 0
⏱️ Độ phức tạp
Kiểm tra 1 số nguyên tố: O(√n)
Tổng:
O(N × √max)
Bộ nhớ: O(1)
Đáp Án Bài 2: Mật Mã:
# SECRCODE.py
import sys
sys.stdin = open("SECRCODE.INP", "r")
sys.stdout = open("SECRCODE.OUT", "w")
xau = sys.stdin.read().strip()
# Mảng đếm số lần xuất hiện của các chữ cái a -> z
dem = [0] * 26
# Đếm ký tự
for ky_tu in xau:
vi_tri = ord(ky_tu) - ord('a')
dem[vi_tri] += 1
# Tạo mã bản quyền
ket_qua = ""
for i in range(26):
if dem[i] > 0:
ket_qua += str(dem[i])
print(ket_qua)
🔹 Phân tích bài toán
Đề bài cho một xâu ký tự thường a–z
Cần:
Đếm số lần xuất hiện của từng chữ cái
Theo thứ tự alphabet a → z
Nếu chữ cái xuất hiện (đếm > 0) thì ghi số lần xuất hiện vào mã
Các số được nối liền nhau, không có dấu cách
🔹 Ví dụ phân tích
Xâu:
bcddaagfxybbbccccdeeezyyzzz
Ký tự
Số lần
a
2
b
4
c
6
d
3
e
5
f
1
x
3
y
3
z
4
👉 Mã bản quyền: 246351334
🔹 Ý tưởng giải
Dùng mảng đếm 26 phần tử, mỗi phần tử tương ứng một chữ cái
Duyệt xâu:
Mỗi ký tự → tăng biến đếm tương ứng
Duyệt mảng từ a đến z:
Nếu số đếm > 0 → nối vào kết quả
🔹 Độ phức tạp
Thời gian: O(n) (n là độ dài xâu)
Bộ nhớ: O(1) (chỉ dùng mảng 26 phần tử)
Đáp án bài 3: Chọn Phần Thưởng
# BONUSSEL.py
import sys
import math
sys.stdin = open("BONUSSEL.INP", "r")
sys.stdout = open("BONUSSEL.OUT", "w")
m, n = map(int, sys.stdin.readline().split())
tong = 0
for _ in range(m):
dong = list(map(int, sys.stdin.readline().split()))
for gia_tri in dong:
can = int(math.isqrt(gia_tri))
if can * can == gia_tri:
tong += gia_tri
print(tong)
🔹 Phân tích bài toán
Cho bảng số nguyên dương kích thước m × n
Yêu cầu:
Tìm tất cả các số chính phương
Tính tổng các số đó
🔹 Số chính phương là gì?
Một số x là số chính phương nếu:
x = k² (k là số tự nhiên)
👉 Cách kiểm tra nhanh:
k = int(sqrt(x))
nếu k * k == x → x là số chính phương
🔹 Ý tưởng giải
Đọc m, n
Duyệt từng phần tử trong bảng
Với mỗi số:
Tính căn bậc hai nguyên
Nếu bình phương lại bằng chính nó → cộng vào tổng
🔹 Độ phức tạp
Thời gian: O(m × n)
Bộ nhớ: O(1)
✅ Ghi nhớ khi đi thi
✔ Dùng math.isqrt()chính xác – nhanh – an toàn ✔ Biến đặt rõ nghĩa ✔ Không in thừa dòng, thừa khoảng trắng
Đáp án bài 4: Tam Giác
# TRIANGLE.py
import sys
sys.stdin = open("TRIANGLE.INP", "r")
sys.stdout = open("TRIANGLE.OUT", "w")
def binh_phuong_khoang_cach(x1, y1, x2, y2):
return (x2 - x1) ** 2 + (y2 - y1) ** 2
T = int(sys.stdin.readline())
for _ in range(T):
xa, ya, xb, yb, xc, yc = map(float, sys.stdin.readline().split())
# Kiểm tra 3 điểm có thẳng hàng không
dien_tich = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya)
if dien_tich == 0:
print("NO")
continue
# Tính bình phương độ dài các cạnh
AB2 = binh_phuong_khoang_cach(xa, ya, xb, yb)
BC2 = binh_phuong_khoang_cach(xb, yb, xc, yc)
CA2 = binh_phuong_khoang_cach(xc, yc, xa, ya)
# Kiểm tra định lý Pitago
if (abs(AB2 + BC2 - CA2) < 1e-9 or
abs(AB2 + CA2 - BC2) < 1e-9 or
abs(BC2 + CA2 - AB2) < 1e-9):
print("YES")
else:
print("NO")
🔹 Phân tích đề bài
Cho T bộ dữ liệu, mỗi bộ gồm tọa độ 3 điểm A, B, C trong mặt phẳng OXY.
Yêu cầu: 👉 Kiểm tra 3 điểm có tạo thành TAM GIÁC VUÔNG hay không
In:
"YES" nếu là tam giác vuông
"NO" nếu không phải
🔹 Điều kiện toán học
1️⃣ Ba điểm tạo thành tam giác
Ba điểm không thẳng hàng ⇔ Diện tích tam giác ≠ 0
👉 Kiểm tra bằng tích có hướng:
(xB - xA)(yC - yA) - (xC - xA)(yB - yA) ≠ 0
2️⃣ Tam giác vuông (định lý Pitago)
Gọi:
AB², BC², CA² là bình phương độ dài các cạnh
Tam giác vuông nếu:
AB² + AC² = BC²
hoặc
AB² + BC² = AC²
hoặc AC² + BC² = AB²
⚠️ KHÔNG lấy căn để tránh sai số số thực (đề đã nhắc)
🔹 Công thức bình phương khoảng cách
Với A(x₁, y₁), B(x₂, y₂):
AB² = (x₂ - x₁)² + (y₂ - y₁)²
🔹 Ý tưởng giải
Với mỗi bộ test:
Đọc tọa độ A, B, C
Kiểm tra có tạo thành tam giác
Tính AB², BC², CA²
Kiểm tra định lý Pitago
In kết quả
🔹 Độ phức tạp
Mỗi test: O(1)
Tổng: O(T) → Chạy rất nhanh
✅ Giải thích điểm quan trọng (rất hay bị sai)
⚠️ KHÔNG dùng sqrt() ⚠️ So sánh số thực phải dùng sai số nhỏ (1e-9) ⚠️ Phải kiểm tra tạo thành tam giác trước
📌 Mẹo ăn điểm khi thi
✔ Dùng bình phương độ dài ✔ So sánh bằng abs(a-b) < 1e-9 ✔ In đúng "YES" / "NO" (IN HOA)
1. Bản chất của đoạn code
Đoạn code này dùng để kiểm tra xem một tam giác có phải là tam giác vuông hay không dựa trên Định lý Pitago đảo.
Định lý: Nếu tổng bình phương hai cạnh bằng bình phương cạnh còn lại ($a^2 + b^2 = c^2$) thì đó là tam giác vuông.
Vì chúng ta không biết cạnh nào là cạnh huyền, nên phải kiểm tra cả 3 trường hợp:
AB^2 + BC^2 = CA^2 (Vuông tại B)
AB^2 + CA^2 = BC^2 (Vuông tại A)
BC^2 + CA^2 = AB^2 (Vuông tại C)
2. Tại sao phải dùng abs(...) < 1e-9 mà không dùng dấu ==?
Đây là kiến thức “sống còn” cho học sinh khi thi HSG Tin học.
Vấn đề sai số: Trong máy tính, các số thực (kiểu float) được lưu dưới dạng nhị phân nên thường xảy ra sai số nhỏ.
Ví dụ: Kết quả lẽ ra là 25.0 nhưng máy tính có thể lưu là 24.99999999999999.
Nếu ta dùng if AB2 + BC2 == CA2:, máy sẽ trả về False (Sai), dẫn đến mất điểm oan.
Giải pháp: Thay vì so sánh bằng nhau tuyệt đối, ta kiểm tra xem hiệu của hai vế có đủ nhỏ hay không.
abs(AB2 + BC2 - CA2) là trị tuyệt đối của hiệu hai vế.
1e-9 (tức là 10^{-9} hay 0.000000001) được gọi là sai số cho phép (epsilon).
Kết luận: Nếu hiệu của hai vế nhỏ hơn 10^{-9}, ta coi như chúng bằng nhau.
3. Cách giải thích cho học sinh (Ngôn ngữ của Thầy Dân)
Thầy có thể dạy các em như thế này:
Bước 1: Tính bình phương độ dài 3 cạnh (gọi là AB2, BC2, CA2).
Bước 2: Áp dụng Pitago đảo. Nhưng nhớ là trong lập trình, “bằng nhau” với số thực rất mong manh.
Bước 3: Sử dụng “khoảng cách an toàn”. Nếu hai vế chỉ lệch nhau một tí xíu không đáng kể (< 1e-9) thì máy tính chấp nhận đó là tam giác vuông.
4. Code viết lại cho chuyên nghiệp
Các em có thể đưa đoạn này vào chuyên đề Hình học:
# Giả sử đã tính xong bình phương các cạnh AB2, BC2, CA2
sai_so = 1e-9 # Epsilon
# Kiểm tra từng trường hợp vuông tại A, B, hoặc C
vuong_tai_B = abs(AB2 + BC2 - CA2) < sai_so
vuong_tai_A = abs(AB2 + CA2 - BC2) < sai_so
vuong_tai_C = abs(BC2 + CA2 - AB2) < sai_so
if vuong_tai_A or vuong_tai_B or vuong_tai_C:
print("YES") # Là tam giác vuông
else:
print("NO")
Đáp án bài 5: Lãi Kép Ngân Hàng:
# COMPINT.py
import sys
sys.stdin = open("COMPINT.INP", "r")
sys.stdout = open("COMPINT.OUT", "w")
T = int(sys.stdin.readline())
for _ in range(T):
M, r, n = map(float, sys.stdin.readline().split())
n = int(n)
tong_tien = M
# Tính lãi kép qua từng tháng
for _ in range(n):
tong_tien = tong_tien + tong_tien * r / 100
# In kết quả với 1 chữ số thập phân
print(f"{tong_tien:.1f}")
🔹 Phân tích đề bài
Có T khoản gửi tiết kiệm
Mỗi khoản gồm:
M: tiền vốn ban đầu
r: lãi suất % mỗi tháng
n: số tháng gửi
Hình thức: LÃI KÉP
Tiền lãi của tháng trước được cộng vào vốn để tính lãi cho tháng sau
👉 Yêu cầu: Tính tổng số tiền nhận được sau n tháng, in ra 1 chữ số thập phân
🔹 Công thức lãi kép theo tháng
Sau mỗi tháng:
T=T+T* r /100
Tương đương:
T = T * (1 + r/100)
Lặp lại n lần
🔹 Ví dụ phân tích (đề bài)
Gửi:
M = 1000000 r = 0.7 (%) n = 3
Tháng 1: T1 = 1000000 * 1.007 = 1007000
Tháng 2: T2 = 1007000 * 1.007 = 1014049
Tháng 3: T3 = 1014049 * 1.007 = 1021147.3
🔹 Ý tưởng giải
Đọc số bộ test T
Với mỗi bộ:
Gán tong_tien = M
Lặp n tháng:
tong_tien *= (1 + r/100)
In kết quả định dạng 1 chữ số thập phân
🔹 Độ phức tạp
Mỗi test: O(n) (n ≤ 500)
Tổng: O(T × n) → chạy rất nhanh
⚠️ Lưu ý quan trọng khi thi
✔ Dùng số thực (float) ✔ Không làm tròn sớm ✔ Chỉ làm tròn khi in kết quả ✔ In đúng 1 chữ số thập phân
🧠 Vì sao KHÔNG dùng công thức mũ?
Có thể dùng:
T = M * (1 + r/100)^n
❌ Nhưng dễ sai số số thực ✅ Vòng lặp an toàn hơn – đúng tinh thần đề THCS
KỲ THI CHỌN HỌC SINH GIỎI CẤP TỈNH
TRUnG học Cơ Sở
Năm học 2022-2023 Môn: TIN HỌC
Thời gian: 150 phút (không kể thời gian giao đề) Ngày thi: 21/3/2023 ^
(Đề thi có 5 trang, gồm 5 bài)
TỔNG quan các BÀi thi
Thứ tự
Tên bài
File chương trình
File dữ liệu vào
File kết quả
Bài 1
Tương đồng
SAME.*
SAME.INP
SAME.OUT
Bài 2
Tách xâu
STRING.*
STRING.INP
STRING.OUT
Bài 3
May mắn
LUCKY.*
LUCKY.INP
LUCKY.OUT
Bài 4
Tam giác
TRIANGLE.*
TRIANGLE.INP
TRIANGLE.OUT
Bài 5
Chở hàng
GOOD.*
GOOD.INP
GOOD.OUT
Dấu * được thay thế bởi PAS, CPP, PY của ngôn ngữ lập trình được sử dụng tương ứng là Free Pascal, C++, Python hoặc phần mở rộng tương ứng với NNLT khác.
Bài 1: (4 điểm) Tương đồng Tên chương trình: SAME.*
Vườn bưởi nhà Alice có n cây. Để theo dõi sự phát triển của các cây bưởi của mình, Alice thường xuyên đo và ghi lại chiều cao của chúng. Trong tuần này, Alice có được bảng chiều cao của các cây bưởi là một dãy số nguyên a[1], a[2],…, a[n], trong đó a[i] là chiều cao của cây bưởi thứ i. Nhìn vào dãy số, Alice biết có những cây có chiều cao trùng nhau và Alice gọi mỗi tần số trùng nhau là tần số “tương đồng”.
Do số lượng cây bưởi nhiều nên Alice muốn nhờ các bạn lập trình tìm tần số tương đồng lớn nhất của các cây bưởi là bao nhiêu?
Dữ liệu vào: Đọc từ file SAME. INP gồm 2 dòng:
Dòng 1: gồm một số nguyên dương n (0 < n <106).
Dòng 2: gồm n số nguyên dương a[i] (0 < ai <106), mỗi số ứng với chiều cao của một cây bưởi, giữa các số được cách nhau bởi một khoảng trắng.
Kết quả: Ghi ra file SAME.OUT gồm duy nhất một số nguyên dương là tần số tương đồng lớn nhất.
Ví dụ:
SAME.INP
same.out
7
9 8 6 8 5 6 10
2
2
3 10
1
Giải thích bộ test 1:
Có 1 chiều cao: 5;
Có 2 chiều cao: 6;
Có 2 chiều cao: 8;
Có 1 chiều cao: 9;
Có 1 chiều cao: 10
->Tần số tương đồng lớn nhất là: 2
Bài 2: (4 điểm) Tách xâu Tên chương trình: STRING.*
Hôm nay, mẹ và Cám đi dự dạ hội. Tấm cũng rất muốn được đi. Nhưng trước khi đi, mẹ Cám giao cho Tấm một công việc để làm khó Tấm như sau:
Cho một xâu s gồm các ký tự là các chữ cái in hoa hoặc in thường (trong bảng chữ cái Tiếng Anh) và các kí tự số. Mẹ kế yêu cầu Tấm hãy tách các ký tự trong xâu s thành hai phần như sau:
Phần 1: gồm các chữ cái có mặt trong s nhưng viết theo thứ tự ngược lại.
Phần 2: gồm các chữ số có mặt trong xâu s nhưng phải được sắp xếp theo thứ tự từ nhỏ đến lớn.
Nếu Tấm thực hiện xong công việc thì mới được đi dự tiệc. Nhưng Tấm có thời gian rất ít nên chưa giải được bài toán. Các bạn đội tuyển Tin học hãy giúp đỡ Tấm giải bài toán để Tấm còn được đi dự tiệc nhé!
Dữ liệu vào: Đọc từ file STRING.INP gồm 1 dòng chứa xâu s có độ dài không quá 103 ký tự. Dữ liệu vào đảm trong xâu s luôn có kí tự chữ cái và kí tự chữ số. Kết quả: Ghi ra fíle STRING.OUT gồm 2 dòng:
Dòng 1: gồm các chữ cái trong xâu s nhưng được viết theo thứ tự ngược lại.
Dòng 2: gồm các chữ số trong xâu s, nhưng phải được sắp xếp theo thứ tự từ nhỏ đến lớn.
Ví dụ:
STRING.INP
STRING.OUT
m2aC0ma2T3
TamCam
0223
Bài 3: (4 điểm) May mắn Tên chương trình: LUCKY.*
Trong buổi tiệc liên hoan cuối năm của công ty cung cấp điện thoại Thế Giới Trẻ, ghế ngồi trong hội trường của khách mời được bố trí thành một ma trận hình chữ nhật gồm m hàng và n cột. Để buổi liên hoan thêm vui vẻ, ban tổ chức cho mỗi khách mời rút ngẫu nhiên một phiếu, trên phiếu có ghi một số nguyên dương trong phạm vi từ 1 đến 109.
Ban tổ chức sẽ trao cho những người may mắn mỗi người một phần quà là một chiếc điện thoại. Biết rằng người may mắn là người có số ghi trong phiếu của
mình lớn hơn trung bình cộng của số trong phiếu của những người ngồi xung quanh người đó.
Xung quanh một người được định nghĩa như sau:
Trường hợp 1: Người ngồi ở vị trí góc (trên trái, dưới trái, trên phải, dưới
phải) của hình chữ nhật thì chỉ có 2 người ngồi xung quanh.
Trường hợp 2: Người ngồi ở vị trí bìa (trừ góc) thì có 3 người xung quanh. Trường hợp 3: Người ngồi ở các vị trí còn lại có 4 người xung quanh.
Trường hợp 1 Trường hợp 2 Trường hợp 3
Ô gạch sọc chỉ vị trí xung quanh của vị trí được tô đen.
Bạn hãy giúp ban tổ chức xác định số lượng điện thoại cần phải chuẩn bị để trao cho những người may mắn.
Dữ liệu vào: Đọc từ file LUCKY.INP gồm:
Dòng 1: gồm hai số nguyên dương theo thứ tự m, n (0 < m, n <103), giữa m và n được cách nhau bởi dấu cách.
m dòng tiếp theo, mỗi dòng gồm n số nguyên dương có giá trị không quá 109, giữa hai số cách nhau bởi một dấu cách.
Kết quả: Ghi ra file LUCKY.OUT gồm một số nguyên là số điện thoại ban tổ chức cần chuẩn bị.
Ví dụ:
LUCKY.INP
LUCKY.OUT
3 4
3
1 4 3 1
1 1 5 2
2 1 2 1
Giải thích:
Số lượng điện thoại cần chuẩn bị là 3, vì có ba người may mắn:
+ Người thứ nhất ngồi ở hàng 1, cột 2, có số phiếu là 4 (có 3 người xung quanh) + Người thứ hai ngồi ở hàng 2, cột 3, có số phiếu là 5 (có 4 người xung quanh) + Người thứ ba ngồi ở hàng 3, cột 1, có số phiếu là 2 (có 2 người xung quanh)
Bài 4: (4 điểm) Tam giác Tên chương trình: TRIANGLE.*
Alice có n que tính, mỗi que có độ dài là một số nguyên dương. Alice muốn tạo ra các tam giác bằng cách ghép ba que tính lại với nhau, độ dài mỗi cạnh là một que tính.
Em hãy giúp Alice đếm xem có bao nhiêu tam giác được tạo thành từ các que tính này và cho biết diện tích lớn nhất trong các diện tích của các tam giác ghép được là bao nhiêu?
Biết rằng:
+ Hai tam giác được gọi là khác nhau nếu có ít nhất một que tính khác nhau.
+ Ta có thể tính diện tích tam giác theo công thức sau :
s=Vp * (p — à) * (p — b) * (p — c)
Trong đó a,b,c là độ dài 3 cạnh của tam giác, và p là nửa chu vi của tam giác.
Dữ liệu vào: Đọc từ file TRIANGLE.INP gồm:
Dòng 1: gồm một số nguyên dương n (3 < n < 100)
Dòng 2: gồm n số nguyên dương a[1], a[2], …, a[n] là độ dài của n que tính (1 < a[i] < 106 1<i<n). Giữa các số được cách nhau bởi một khoảng trắng.
Kết quả: Ghi ra file TRIANGLE.OUT gồm:
Dòng 1: Ghi số lượng tam giác có thể ghép được.
Dòng 2: Ghi một số thực là diện tích lớn nhất của tam giác, kết quả làm tròn đến 2 chữ số ở phần thập phân. Trường hợp không có tam giác nào thì dòng này ghi -1.
TRIANGLE.INP
TRIANGLE.OUT
Giải thích
5
3
Có 3 tam giác được tạo từ 5 que tính trên:
1 4 5 2 3
6.00
Tam giác 1: Que thứ 2, 3, 4 Tam giác 2: Que thứ 2, 3, 5 Tam giác 3: Que thứ 2, 4, 5 Trong đó tam giác thứ 2 có 3 độ dài là 4 5 3 có có diện tích lớn nhất là 6.00
4
4
Có 4 tam giác được tạo từ 4 que tính trên:
2 2 2 2
1.73
Tam giác 1: Que thứ 1, 2, 3
Tam giác 2: Que thứ 1, 2, 4
Tam giác 3: Que thứ 1, 3, 4
Tam giác 4: Que thứ 2, 3, 4
Trong đó 4 tam giác đều có cùng diện
tích là: 1.73
3
0
Không ghép được tam giác nào
1 2 3
-1
Bài 5: (4 điểm) Hàng hóa Tên chương trình: GOOD.*
Cửa hàng tạp hóa XYZ cần chở n kiện hàng giao cho khách. Kiện hàng thứ i có trọng lượng là a[i] tấn. Cửa hàng có một xe tải có trọng tải là m tấn. Trong
chuyến hàng đầu tiên, cửa hàng muốn chở những kiện hàng đi giao thỏa mãn các yêu cầu sau:
Yêu cầu 1: Ưu tiên kiện hàng có trọng lượng lớn hơn sẽ được chở đi.
Yêu cầu 2: Xe còn đủ trọng tải chở được thì chọn tiếp kiện hàng khác thỏa mãn yêu cầu 1.
Em hãy lập trình giúp cửa hàng xác định trọng lượng các kiện hàng của chuyến xe đầu tiên.
Dữ liệu vào: Đọc từ file GOOD.INP gồm hai dòng:
Dòng 1: gồm số nguyên dương n (1 <n<103) là số kiện hàng và số nguyên dương m (0 < m < 109) là trọng lượng của xe tải. Giữa n và m được cách nhau bởi dấu cách.
Dòng 2: gồm n số nguyên dương a[i] (0 < a[i] <109, a[i] < m, 1<i<n) thể hiện trọng lượng của kiện hàng thứ i. Giữa các số được cách nhau bởi dấu cách.
Kết quả: Ghi ra file GOOD.OUT các số nguyên dương là trọng lượng của các kiện hàng trong chuyến xe đầu tiên theo trọng lượng giảm dần.
GOOD.INP
GOOD.OUT
5 10
7 5 1 3 8
8 1
5 12
2 8 2 4 1
8 4
Giải thích bộ test 1:
Có n = 5 kiện hàng và xe có trọng tải m = 10 tấn Các kiện hàng có trọng lượng lần lượt là: 7 5 1 3 8 Vậy các kiện hàng được chở đi trong chuyến đầu tiên có trọng lượng lần lượt là 8 và 1.
Vì kiện hàng có trọng lượng là 8 lớn hơn trọng lượng các kiện hàng còn lại và 8 < m=10 nên được ưu tiên chọn. Trọng tải xe còn có thể chứa được là 10 – 8 = 2, nên chọn tiếp kiện hàng có trọng lượng là 1.
…………………………………………………… HẾT…………………………………………………….
Thí sinh không được sử dụng tài liệu. Giám thị không giải thích gì thêm.
Họ và tên thí sinh: …………………………………………………………. Số báo danh:……………………………………………………………..
Đáp án bài 1: Tương đồng – SAME.*
1.1 Đáp án bài 1:
import sys
from collections import Counter
sys.stdin = open("SAME.INP", "r")
sys.stdout = open("SAME.OUT", "w")
n = int(sys.stdin.readline().strip()) # Đọc số lượng phần tử (không cần dùng)
a = list(map(int, sys.stdin.readline().split())) # Đọc danh sách số
tanso = Counter(a) # Đếm tần số xuất hiện của từng số
tansolonnhat = max(tanso.values()) # Tìm tần số lớn nhất
print(tansolonnhat) # Ghi kết quả ra file
1.2 CÁCH GIẢI 1:
1️⃣ Đọc dữ liệu từ file:
Vì bạn muốn dùng sys.stdin, ta mở file bằng sys.stdin = open(“SAME.INP”, “r”).
Đọc số n (số lượng phần tử) nhưng không cần dùng đến.
Đọc danh sách số nguyên từ file.
2️⃣ Đếm tần số xuất hiện của từng số:
Dùng collections.Counter để đếm số lần xuất hiện của mỗi phần tử.
3️⃣ Tìm tần số lớn nhất:
Duyệt qua các giá trị trong Counter và lấy giá trị lớn nhất bằng max(freq.values()).
4️⃣ Ghi kết quả ra file:
In kết quả ra sys.stdout, kết quả sẽ được lưu vào “SAME.OUT”.
⏳ Độ phức tạp
Đọc dữ liệu: O(n)
Đếm tần số: O(n)
Tìm max: O(n)
Tổng: O(n) (rất tối ưu ✅).
👉 Tóm lại, ta chỉ cần duyệt danh sách 1 lần để đếm tần số và 1 lần để tìm giá trị lớn nhất. 🚀
Đáp án bài 2: Tách xâu – STRING.*
2.1 Đáp án bài 2:
import sys
sys.stdin = open("STRING.INP", "r")
sys.stdout = open("STRING.OUT", "w")
s = sys.stdin.readline().strip()
chu = []
so = []
# Phân loại ký tự
for i in s:
if i.isalpha():
chu.append(i)
elif i.isdigit():
so.append(i)
# Xử lý yêu cầu bài toán
chu.reverse() # Đảo ngược thứ tự chữ cái
so.sort() # Sắp xếp các chữ số theo thứ tự tăng dần
# Ghi kết quả ra file
print("".join(chu))
print("".join(so))
2.2 CÁCH GIẢI:
Phân tích bài toán
Bài toán yêu cầu:
Tách các chữ cái trong xâu và đảo ngược thứ tự xuất hiện của chúng.
Tách các chữ số trong xâu và sắp xếp chúng theo thứ tự tăng dần.
Cách giải
Duyệt qua từng ký tự của xâu:
Nếu là chữ cái, thêm vào danh sách chu.
Nếu là chữ số, thêm vào danh sách so.
Đảo ngược danh sách letters.
Sắp xếp danh sách digits theo thứ tự tăng dần.
Ghi kết quả ra file.
Độ phức tạp
Duyệt chuỗi O(n)
Đảo ngược danh sách chữ O(n)
Sắp xếp danh sách số O(k log k) (với k là số lượng chữ số, k ≤ n)
Tổng thể: O(n log n) ~ O(n) trong thực tế.
Đáp án Bài 3: May mắn – LUCKY.*
3.1 Đáp án :
import sys
sys.stdin = open("LUCKY.INP", "r")
sys.stdout = open("LUCKY.OUT", "w")
def tinh_trung_binh_lan_can(ma_tran, i, j, m, n):
lan_can = []
huong = [(-1, 0), (1, 0), (0, -1), (0, 1)] # Trái, phải, trên, dưới
for dx, dy in huong:
ni, nj = i + dx, j + dy
if 0 <= ni < m and 0 <= nj < n:
lan_can.append(ma_tran[ni][nj])
return sum(lan_can) / len(lan_can) if lan_can else 0
m, n = map(int, sys.stdin.readline().split())
ma_tran = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]
so_nguoi_may_man = 0
# Kiểm tra từng ô trong ma trận
for i in range(m):
for j in range(n):
trung_binh_lan_can = tinh_trung_binh_lan_can(ma_tran, i, j, m, n)
if ma_tran[i][j] > trung_binh_lan_can:
so_nguoi_may_man += 1
print(so_nguoi_may_man)
3.2 CÁCH GIẢI
Cách giải bài toán:
Đọc dữ liệu đầu vào:
Đọc kích thước ma trận m x n.
Đọc các giá trị của ma trận từ file.
Tính toán số người may mắn:
Với mỗi vị trí (i, j), tính trung bình cộng của các ô xung quanh (trái, phải, trên, dưới).
Nếu giá trị ở (i, j) lớn hơn trung bình đó, thì người ở vị trí đó là người may mắn.
Xuất kết quả:
Ghi số lượng người may mắn ra file kết quả.
Đáp án bài 4: Tam giác -TRIANGLE.*
4.1 Đáp án:
import math,sys
sys.stdin=open("TRIANGLE.INP",'r')
sys.stdout=open('TRIANGLE.OUT','w')
def dien_tich_heron(a, b, c):
s = (a + b + c) / 2
return math.sqrt(s * (s - a) * (s - b) * (s - c))
def tam_giac_lon_nhat(n, canh):
canh.sort(reverse=True) # Sắp xếp giảm dần
for i in range(n - 2):
if canh[i] < canh[i + 1] + canh[i + 2]: # Điều kiện tam giác
return dien_tich_heron(canh[i], canh[i + 1], canh[i + 2])
return 0 # Không tìm được tam giác hợp lệ
n = int(input())
canh = list(map(int, input().split()))
print(f"{tam_giac_lon_nhat(n, canh):.2f}")
1. Bài toán đang làm gì?
Yêu cầu: Cho n đoạn thẳng có độ dài cho trước. → Hãy chọn 3 đoạn để tạo thành tam giác có diện tích lớn nhất. → In ra diện tích tam giác đó (làm tròn 2 chữ số thập phân). → Nếu không tạo được tam giác, in ra 0.
2. Phân tích từng phần của chương trình
🔹 Hàm dien_tich_heron(a, b, c)
defdien_tich_heron(a, b, c):
s = (a + b + c) / 2 return math.sqrt(s * (s - a) * (s - b) * (s - c))
Áp dụng công thức Heron để tính diện tích tam giác khi biết 3 cạnh.
for i inrange(n - 2): if canh[i] < canh[i + 1] + canh[i + 2]: return dien_tich_heron(canh[i], canh[i + 1], canh[i + 2])
Ý tưởng thuật toán 💡
Sau khi sắp xếp:
canh[i] là cạnh lớn nhất
Kiểm tra điều kiện tồn tại tam giác:
cạnh lớn nhaˆˊt<tổng hai cạnh coˋn lại\text{cạnh lớn nhất} < \text{tổng hai cạnh còn lại}cạnh lớn nhaˆˊt<tổng hai cạnh coˋn lại
Vì đã sắp giảm dần:
Tam giác đầu tiên hợp lệ sẽ có chu vi lớn nhất
→ Diện tích cũng lớn nhất
Khi tìm được → tính diện tích và kết thúc luôn
return0
Nếu duyệt hết mà không có bộ 3 cạnh nào hợp lệ
→ Không tạo được tam giác
3. Tóm tắt thuật toán
👉 Các bước:
Đọc số cạnh n và danh sách độ dài.
Sắp xếp các cạnh theo thứ tự giảm dần.
Duyệt từng bộ 3 cạnh liên tiếp:
Kiểm tra điều kiện tam giác.
Nếu hợp lệ → tính diện tích bằng công thức Heron → kết thúc.
Nếu không có tam giác → in 0.
4. Độ phức tạp của chương trình
⏱️ Thời gian
Công đoạn
Độ phức tạp
Sắp xếp
O(n log n)
Duyệt kiểm tra
O(n)
Tính diện tích
O(1)
➡️ Tổng:
O(nlogn)\boxed{O(n \log n)}O(nlogn)
💾 Bộ nhớ
Lưu danh sách n cạnh
➡️ O(n)
5. Vì sao thuật toán này tối ưu?
✅ Không duyệt tất cả bộ 3 cạnh (O(n³)) ✅ Dựa vào tính chất sắp xếp để tìm nhanh tam giác lớn nhất ✅ Phù hợp bài thi HSG cấp huyện / tỉnh
Đáp án bài 5: Hàng hóa – GOOD.*
5.1 Đáp án bài Hàng Hóa:
import sys
sys.stdin = open("GOOD.INP", "r")
sys.stdout = open("GOOD.OUT", "w")
n, m = map(int, sys.stdin.readline().split())
trong_luong = list(map(int, sys.stdin.readline().split()))
# Sap xep danh sach kien hang theo thu tu tang dan
trong_luong.sort()
trong_luong=trong_luong[::-1]
chon = []
tong_trong_luong = 0
# Duyet qua tung kien hang theo thu tu tang dan
for w in trong_luong:
if tong_trong_luong + w <= m: # Neu them kien hang vao van khong vuot tai trong
chon.append(w)
tong_trong_luong += w
elif tong_trong_luong>m:
break # Neu qua tai thi dung
# Ghi ket qua ra file theo thu tu giam dan
print(*chon)
1. Mô tả bài toán (hiểu từ chương trình)
Có n kiện hàng, mỗi kiện có trọng lượng cho trước.
Xe có tải trọng tối đa là m.
Hãy chọn các kiện hàng sao cho:
Tổng trọng lượng không vượt quá m
Ưu tiên lấy các kiện nặng trước
In ra danh sách các kiện hàng được chọn.
2. Phân tích từng phần chương trình
🔹 Đọc dữ liệu
n, m = map(int, sys.stdin.readline().split())
trong_luong = list(map(int, sys.stdin.readline().split()))
for w in trong_luong: if tong_trong_luong + w <= m:
chon.append(w)
tong_trong_luong += w elif tong_trong_luong > m: break
Ý tưởng thuật toán 💡
Duyệt từng kiện theo thứ tự trọng lượng giảm dần
Với mỗi kiện:
Nếu thêm vào không vượt quá tải trọng → chọn
Nếu đã vượt tải → dừng lại
👉 Đây là thuật toán tham lam:
Ở mỗi bước, chọn kiện nặng nhất có thể
Không quay lui, không xét lại
🔹 In kết quả
print(*chon)
In danh sách các kiện hàng được chọn
Thứ tự đã là giảm dần
3. Tóm tắt thuật toán
👉 Các bước chính:
Đọc dữ liệu đầu vào.
Sắp xếp các kiện hàng theo trọng lượng giảm dần.
Lần lượt xét từng kiện:
Nếu thêm vào vẫn không vượt tải → chọn.
Nếu vượt tải → dừng.
In ra các kiện đã chọn.
4. Độ phức tạp của chương trình
⏱️ Độ phức tạp thời gian
Công đoạn
Độ phức tạp
Sắp xếp danh sách
O(n log n)
Duyệt chọn kiện
O(n)
In kết quả
O(n)
➡️ Tổng thời gian:
O(nlogn)
💾 Độ phức tạp bộ nhớ
Danh sách trọng lượng: O(n)
Danh sách chọn: O(n)
➡️ Tổng bộ nhớ:
O(n)
5. Nhận xét theo chuẩn bài thi
✅ Thuật toán đơn giản – hiệu quả ✅ Phù hợp với bài toán có ràng buộc nhỏ và trung bình ✅ Dễ cài đặt, dễ hiểu, dễ chấm điểm
⚠️ Lưu ý:
Đây là bài toán tham lam, không đảm bảo tối ưu trong mọi trường hợp nếu đề yêu cầu tối đa tổng trọng lượng (bài toán cái túi 0/1).
Tuy nhiên, nếu đề yêu cầu ưu tiên kiện nặng, thuật toán là đúng.
Câu hỏi thường gặp về Tổng hợp 75 Đề thi HSG Tin học THCS Python
1. Bộ 75 đề thi HSG Tin học này có lời giải chi tiết (Full Code) không? Có. Toàn bộ 75 đề thi trong bài viết này đều đi kèm đáp án và mã nguồn (Source Code) được viết bằng ngôn ngữ lập trình Python. Chúng tôi cũng bổ sung các giải thích về thuật toán để các em học sinh hiểu rõ cách tư duy giải quyết vấn đề chứ không chỉ copy code.
2. Tài liệu này phù hợp cho học sinh lớp mấy? Bộ tài liệu này được biên soạn bám sát cấu trúc đề thi Học sinh giỏi cấp Huyện và cấp Tỉnh, phù hợp nhất cho học sinh khối THCS (Lớp 8, Lớp 9). Ngoài ra, học sinh lớp 6, 7 bắt đầu làm quen với Python nâng cao cũng có thể sử dụng để rèn luyện tư duy logic.
3. Tôi có thể tải file PDF đề thi và đáp án về máy tính không? Được. Ở cuối bài viết, Vi Tính Tấn Dân có cung cấp liên kết tải xuống trọn bộ tài liệu định dạng PDF để thầy cô và các em học sinh tiện in ấn và ôn tập offline.
4. Code Python trong bài viết sử dụng phiên bản nào? Các bài giải mẫu được viết tương thích tốt nhất với Python 3.x (phiên bản phổ biến nhất hiện nay trong giáo dục và thi cử). Bạn có thể chạy code trên các IDE thông dụng như Thonny, PyCharm, hoặc VS Code.
5. Ngoài Python, đề thi có đáp án bằng C++ hay Pascal không? Hiện tại, bài viết này tập trung chuyên sâu vào ngôn ngữ Python. Tuy nhiên, cấu trúc thuật toán là giống nhau. Nếu bạn cần tài liệu C++ hoặc Pascal, vui lòng tham khảo các chuyên mục khác trên website vitinhtandan.com hoặc để lại bình luận để chúng tôi hỗ trợ.
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !
6 Kinh nghiệm làm bài thi Học sinh giỏi Tin học Tỉnh 2026- 2027 & Bí quyết giúp “chiến binh Tin” đạt điểm cao
Tin học là một môn học đặc thù. Trong quá trình học, rèn luyện và đặc biệt là khi đi thi, mọi thứ đều gắn liền với máy tính – thuật toán – tư duy logic. Vì vậy, để đạt được kết quả như mong muốn trong các kỳ thi Học sinh giỏi Tin học, các “chiến binh Tin” cần nắm chắc những kinh nghiệm làm bài thi rất riêng của môn học này.
Bài viết dưới đây tổng hợp những kinh nghiệm quý báu được truyền lại từ các anh chị đi trước, đã từng chinh chiến ở các kỳ thi HSG Tin học cấp huyện, cấp tỉnh, cấp quốc gia. Nếu bạn đang chuẩn bị bước vào kỳ thi quan trọng, đừng bỏ qua bài viết này!
1. Chuẩn bị kiến thức – Nền móng quyết định thành công
Bất kỳ cuộc thi nào cũng đòi hỏi kiến thức trong một phạm vi nhất định, và nhiệm vụ của bạn là phải nắm thật chắc phạm vi đó.
🔹 Các kỳ thi Học sinh giỏi Tin học thường có:
Thuật toán cơ bản & nâng cao
Cấu trúc dữ liệu
Xử lý mảng – chuỗi – đồ thị
Quy hoạch động, vét cạn, tham lam…
👉 Việc quan trọng nhất trước kỳ thi là bạn cần có cái nhìn tổng quát về toàn bộ kiến thức đã học.
⚠️ Lưu ý cực kỳ quan trọng: Không nên “vùi đầu” học thêm kiến thức mới ngay sát ngày thi. Điều này rất dễ gây:
Rối kiến thức
Nhầm lẫn thuật toán
Làm lu mờ những gì bạn đã học kỹ trước đó
👉 Giai đoạn cận thi nên ôn tập – hệ thống – luyện đề, KHÔNG học lan man.
2. Tâm lý khi đi thi – Yếu tố sống còn
Nhiều người thường truyền tai nhau:
“Trước ngày thi không được chơi game, không xem phim, không nghe nhạc…”
❌ Thật ra, những điều cấm đoán này chỉ làm bạn căng thẳng hơn.
✅ Lời khuyên thực tế:
Trước ngày thi khoảng 1–2 ngày, hãy:
Nghe nhạc
Xem phim nhẹ nhàng
Làm việc mình thích
👉 Mục tiêu là tạo tâm lý thoải mái nhất.
📌 Với môn Tin học:
Bạn không học thuộc lòng
Kiến thức không thể “bay mất” chỉ sau 1–2 ngày giải trí
Hãy tự tin!
5 bí kíp Chinh Phục Python ôn thi HSG Tin Học Cấp Tỉnh 2026 – 2027
3. Cách làm bài thi Tin học hiệu quả nhất
3.1. Khi vừa nhận đề – Đừng hoảng loạn
Những phút đầu tiên ai cũng hồi hộp. Việc bạn nên làm là:
✔️ Đọc bài 1 trước (thường là bài dễ, ăn điểm) ✔️ Nếu chưa bình tĩnh:
Tạo sẵn form chương trình
Tạo trước file INPUT – OUTPUT
3.2. Chiến thuật làm bài “vàng”
💡 Nguyên tắc bất di bất dịch:
👉 Bài dễ làm trước – bài khó làm sau 👉 Làm bài nào chắc bài đó
⏱️ Phân bổ thời gian hợp lý:
Bài 1: Làm nhanh nhất có thể
Bài 2 – 3:
Dành 10–15 phút suy nghĩ thuật toán
Nếu chưa ra tối ưu → Duyệt để ăn ~60% số test
📌 Lý do:
Đề Tin học thường cho 60% test dữ liệu nhỏ
Cài đặt duyệt khéo vẫn có điểm!
👉 Sau đó:
Còn thời gian thì cải tiến thuật toán
Ăn được thêm test nào là thêm điểm đó
3.3. Những lưu ý cực kỳ quan trọng
⚠️ Trước khi code:
Đặt đúng tên file chương trình
Đặt đúng tên file INPUT / OUTPUT
Xem kỹ giới hạn dữ liệu để khai báo mảng
⏰ Khi còn 10 phút cuối:
Kiểm tra lại toàn bộ
Tránh sai sót đáng tiếc khi nộp bài
👉 Nên luyện cách làm này với đề thi thử để không bị lúng túng.
4. Kiểm tra bài làm – Đừng bao giờ bỏ qua
Sau khi làm xong mỗi bài, hãy test thật nhiều.
✔️ Test nhỏ:
Tự sinh test
Kiểm tra tính đúng thuật toán
✔️ Test lớn:
Giá trị lớn nhất
Dữ liệu ngẫu nhiên 👉 Phát hiện:
Tràn số
Lỗi mảng
Stack overflow
💡 Với những bài có thuật toán chậm nhưng đúng:
Viết chương trình O(N²) để kiểm tra
So sánh kết quả với chương trình tối ưu
👉 Nếu nhiều cách cho cùng kết quả, xác suất đúng rất cao!
5. Đọc kỹ đề bài – Càng đọc càng tốt
📌 Hãy đọc đề:
Trước khi làm
Trong khi làm
Sau khi làm xong
Rất nhiều trường hợp:
❌ Sai vì hiểu nhầm đề
❌ Thiếu chi tiết nhỏ nhưng mất nhiều điểm
6. Phong cách viết chương trình khi đi thi
Phong cách code tốt giúp bạn:
Làm nhanh hơn
Debug dễ hơn
Ít sai sót hơn
🔹 Ít biến → có thể đặt tên ngắn (a, b, x, y, f…) 🔹 Nhiều biến → đặt tên có ý nghĩa, tránh nhầm lẫn
👉 Nhầm biến là lỗi rất khó chịu khi đi thi!
Đừng đòi hỏi “hoàn hảo”
❌ Không phải bài nào cũng giải được 100% ✅ Mục tiêu là ăn điểm tối đa có thể
📌 Nhiều bài:
Chỉ cần thêm 1–2 điều kiện
Có thể tăng rất nhiều điểm
👉 Bình tĩnh đánh giá:
Có nên tiếp tục cải tiến không?
Hay chuyển sang bài khác sẽ hiệu quả hơn?
7. Sao lưu bài làm – Phòng hơn chữa
💾 Thỉnh thoảng hãy:
Lưu bài vào nhiều thư mục
Lưu ở nhiều ổ khác nhau
📁 Nên tạo:
3 thư mục cho 3 bài
1 thư mục riêng cho bài chuẩn bị nộp
👉 Tránh nộp nhầm file!
8. Đánh giá và quyết định thông minh
Trong phòng thi, bạn luôn phải đánh giá:
Độ khó từng bài
Xác suất đúng của thuật toán
Thời gian cần thiết
Khả năng test & debug
👉 Từ đó quyết định:
Làm bài nào trước
Có nên cải tiến tiếp không
Kiểm tra theo cách nào là tốt nhất
TÓM TẮT LẠI LÀ:
Để làm tốt bài thi HSG Tin học 2026-2027, bạn cần nắm vững kiến thức nền tảng, thực hành liên tục, hiểu rõ đề bài, quản lý thời gian hiệu quả, xây dựng chiến lược giải quyết vấn đề và giữ tâm lý vững vàng, tập trung vào tư duy thuật toán và code sạch, tối ưu hóa hiệu suất.
Dưới đây là 6 kinh nghiệm cốt lõi:
Nắm Chắc Nền Tảng + Thuật Toán:
Kiến thức cơ bản: Cấu trúc dữ liệu (mảng, xâu, danh sách liên kết, cây, đồ thị), giải thuật cơ bản (tìm kiếm, sắp xếp, quy hoạch động), lập trình hướng đối tượng (nếu có).
Thuật toán chuyên sâu: Hiểu sâu các thuật toán như Dijkstra, Floyd-Warshall, DFS, BFS, quy hoạch động (DP), greedy. Luyện tập trên các nền tảng như Codeforces, LeetCode, Topcoder để nhuần nhuyễn.
Thực Hành “Học Đi Đôi Với Hành”:
Code thật nhiều: Code lại các bài tập đã giải, tự đặt ra các biến thể của bài toán.
Debug & Tối ưu: Rèn luyện kỹ năng tìm lỗi và tối ưu code, đặc biệt là về độ phức tạp thời gian và bộ nhớ (Time/Space Complexity).
Phân Tích Đề & Chiến Lược Làm Bài:
Đọc kỹ đề: Xác định rõ ràng yêu cầu, điều kiện ràng buộc (constraints), ví dụ.
Lập kế hoạch: Với mỗi bài, hãy phác thảo hướng giải, thuật toán trước khi code. Thường chia nhỏ các bài toán lớn.
Quản Lý Thời Gian Nghiêm Ngặt:
Ưu tiên: Giải quyết bài dễ trước, bài khó sau.
Kiểm tra thường xuyên: Dành thời gian cuối giờ để chạy thử với các test case biên (edge cases) và tối ưu hóa lại code nếu cần.
Tư Duy Thuật Toán & Code “Sạch”:
Hiểu bản chất: Đừng cố gắng nhớ code mẫu, hãy hiểu cách thuật toán hoạt động.
Code rõ ràng: Dùng biến có ý nghĩa, comment hợp lý để dễ đọc, dễ sửa (cũng giúp bạn khi làm bài kiểm tra).
Tâm Lý Vững Vàng & Sức Khỏe:
Giữ bình tĩnh: Khi gặp bài khó, hít thở sâu, quay lại đọc đề.
Ngủ đủ, ăn uống: Đảm bảo thể lực tốt nhất cho ngày thi chính thức
Kết luận
Thi Học sinh giỏi Tin học không chỉ là biết code, mà còn là:
Chiến thuật
Tâm lý
Kinh nghiệm phòng thi
Hy vọng những kinh nghiệm trên sẽ giúp các bạn tự tin hơn, làm bài hiệu quả hơn và đạt được kết quả cao nhất trong các kỳ thi sắp tới.
💪 Chúc các “chiến binh Tin học” thi tốt – code mượt – ăn trọn điểm!
Câu hỏi thường gặp về kinh nghiệm làm bài kỳ thi Học sinh giỏi Tin học Tỉnh 2026–2027
1. Kỳ thi Học sinh giỏi Tin học Tỉnh 2026–2027 gồm những dạng bài nào?
Kỳ thi Học sinh giỏi Tin học Tỉnh thường gồm các dạng bài như: xử lý mảng và chuỗi, thuật toán duyệt – vét cạn, quy hoạch động, đồ thị, toán tin và tối ưu thuật toán. Đề thi có nhiều mức độ từ cơ bản đến nâng cao để phân loại thí sinh.
2. Làm sao để đạt điểm cao trong kỳ thi Học sinh giỏi Tin học Tỉnh?
Để đạt điểm cao, học sinh cần nắm chắc kiến thức nền tảng, luyện đề thường xuyên, rèn kỹ năng phân tích bài toán, phân bổ thời gian hợp lý và áp dụng chiến thuật “bài dễ làm trước – bài khó làm sau”.
3. Có nên học thêm thuật toán mới ngay trước ngày thi không?
Không nên học thêm thuật toán mới ngay sát ngày thi Học sinh giỏi Tin học. Giai đoạn cận thi nên tập trung ôn lại kiến thức đã học, luyện đề và sửa lỗi thường gặp để tránh rối kiến thức và mất tự tin.
4. Khi không nghĩ ra thuật toán tối ưu thì nên làm gì?
Trong trường hợp chưa nghĩ ra thuật toán tối ưu, thí sinh nên cài đặt thuật toán đơn giản hoặc duyệt để ăn điểm một phần. Nhiều bài thi Tin học cho phép đạt 50–60% số điểm với dữ liệu nhỏ nếu cài đặt khéo léo.
5. Phân bổ thời gian làm bài thi Tin học như thế nào là hợp lý?
Thông thường, bài đầu tiên nên hoàn thành nhanh để lấy điểm chắc chắn. Các bài còn lại nên dành thời gian suy nghĩ thuật toán khoảng 10–15 phút trước khi code. Luôn chừa lại 10 phút cuối để kiểm tra và test chương trình.
6. Có cần test chương trình sau khi làm xong mỗi bài không?
Rất cần. Sau khi hoàn thành mỗi bài, học sinh nên test chương trình với dữ liệu nhỏ, dữ liệu biên và dữ liệu lớn để phát hiện lỗi logic, tràn số, vượt giới hạn bộ nhớ hoặc thời gian.
7. Nên sử dụng ngôn ngữ lập trình nào trong kỳ thi HSG Tin học?
Các ngôn ngữ phổ biến trong kỳ thi Học sinh giỏi Tin học là Pascal, C++ và Python. Học sinh nên chọn ngôn ngữ mình thành thạo nhất, hiểu rõ cách xử lý file, tốc độ và giới hạn bộ nhớ.
8. Phong cách viết code có ảnh hưởng đến kết quả thi không?
Có. Phong cách viết code rõ ràng, dễ đọc giúp giảm lỗi, debug nhanh và tiết kiệm thời gian trong phòng thi. Đây là yếu tố rất quan trọng khi thi Học sinh giỏi Tin học.
9. Có nên sao lưu bài làm trong quá trình thi không?
Nên sao lưu bài làm thường xuyên vào nhiều thư mục khác nhau để tránh sự cố kỹ thuật. Việc này giúp bảo vệ bài làm và tránh mất dữ liệu đáng tiếc.
10. Học sinh lớp mấy có thể tham gia thi Học sinh giỏi Tin học Tỉnh?
Thông thường, kỳ thi Học sinh giỏi Tin học Tỉnh dành cho học sinh THCS và THPT, tùy theo quy định của từng địa phương và từng năm học.
11. Bao lâu trước kỳ thi nên bắt đầu ôn luyện HSG Tin học?
Lý tưởng nhất là học sinh nên ôn luyện ít nhất 3–6 tháng trước kỳ thi. Việc chuẩn bị sớm giúp xây dựng nền tảng vững chắc và rèn kỹ năng làm bài hiệu quả.
12. Nguồn tài liệu nào phù hợp để ôn thi Học sinh giỏi Tin học?
Học sinh nên luyện các đề thi HSG Tin học các năm trước, tài liệu thuật toán cơ bản – nâng cao và các bài tập lập trình có lời giải chi tiết để nâng cao tư duy.
Cách Tải Tài liệu 5 Bí kíp chinh phục Python Tài liệu ôn thi HSG Tin Học cấp Tỉnh 2026-2027
Tải Tài liệu PDF 1 lần và học được mãi mãi:
Tải tài liệu 5 Bí kíp chinh phục Python
Phần mềm học PyCharm Community Edition 2021.1 x64:
Phiên bản dành cho Windows 10 và Windows 11:
Phiên bản dành cho Windows 7:
THƯ NGỎ TỪ THẦY TẤN DÂN
Kính gửi quý bậc Phụ huynh và các em Học sinh thân mến!
Trong kỷ nguyên số hiện nay, lập trình không còn là một môn học xa lạ, mà đã trở thành “ngôn ngữ của tương lai”. Tôi hiểu rằng, đằng sau mỗi quyết định cho con theo học lập trình là biết bao kỳ vọng của quý phụ huynh: kỳ vọng con sẽ rèn luyện được tư duy logic, kỳ vọng con sẽ làm chủ công nghệ thay vì sa đà vào những trò chơi vô bổ, và hơn hết là kỳ vọng con sẽ có một hành trang vững chắc để bước vào những ngôi trường chuyên, lớp chọn hay các trường đại học danh tiếng.
Với nhiều năm kinh nghiệm bồi dưỡng đội tuyển Học sinh giỏi, tôi thấu hiểu những khó khăn mà các em thường gặp phải: từ việc lúng túng trước một bài toán thuật toán khó, đến những lỗi sai “đáng tiếc” khiến các em mất đi cơ hội chạm tay vào giải thưởng.
Cuốn tài liệu “Bí Kíp Chinh Phục “ này không chỉ là tập hợp những dòng mã, mà là tâm huyết được tôi đúc kết từ hàng nghìn giờ giảng dạy và hàng trăm kỳ thi thực chiến. Cuốn sách này được thiết kế để:
Đơn giản hóa những khái niệm phức tạp thành những bài học dễ hiểu.
Trang bị chiến thuật thực chiến giúp các em tối ưu điểm số trong phòng thi.
Khơi dậy niềm đam mê sáng tạo, giúp các em tự tin chinh phục mọi thử thách.
Tôi tin rằng, mỗi đứa trẻ đều có một tiềm năng vô hạn. Chỉ cần có một lộ trình đúng đắn và một người dẫn đường tận tâm, các em chắc chắn sẽ làm nên những điều kỳ diệu. Giải thưởng Học sinh giỏi cấp Tỉnh không phải là mục đích cuối cùng, mà là bệ phóng để các em tự tin bước ra thế giới.
Cảm ơn quý Phụ huynh đã tin tưởng và đồng hành cùng tôi trên hành trình kiến tạo tương lai cho các em.
Thân ái
Thầy Tấn Dân
MỤC LỤC TỔNG QUÁT:
📂 PHẦN 1: LÀM CHỦ CÔNG CỤ & KỸ THUẬT PHÒNG THI
Chuyên đề 1: Cấu trúc chương trình chuẩn để chấm máy tự động (CMS, Themis).
Chuyên đề 2: Kỹ thuật đọc/ghi File (.INP, .OUT) không bao giờ lỗi.
Chuyên đề 3: 10 “Tuyệt chiêu” tối ưu mã nguồn chạy nhanh như C++.
Chuyên đề 4: Cách kiểm soát thời gian và bộ nhớ trong phòng thi.
📂 PHẦN 2: XỬ LÝ SỐ HỌC & DÃY SỐ (Chiếm 40% số điểm)
Chuyên đề 5: Số nguyên tố (Sàng Eratosthenes, kiểm tra số nguyên tố cực nhanh).
Chuyên đề 6: Ước chung lớn nhất (GCD), Bội chung nhỏ nhất (LCM) và ứng dụng.
Chuyên đề 7: Phân tích số ra thừa số nguyên tố & các bài toán liên quan.
Chuyên đề 8: Xử lý số siêu lớn (Big Integer) – Thế mạnh tuyệt đối của .
📂 PHẦN 3: XỬ LÝ XÂU KÝ TỰ & MẢNG (Kỹ năng nền tảng)
Chuyên đề 9: Kỹ thuật cắt xâu (Slicing) và các hàm xử lý chuỗi “thần thánh”.
Chuyên đề 10: Mảng 1 chiều, mảng 2 chiều và kỹ thuật duyệt Ma trận.
Chuyên đề 11: Kỹ thuật Mảng cộng dồn (Prefix Sum) – Giải toán trong O(1).
Chuyên đề 12: Hai con trỏ (Two Pointers) & Cửa sổ trượt (Sliding Window).
📂 PHẦN 4: THUẬT TOÁN NÂNG CAO (Dành cho giải Nhất, Nhì)
Chuyên đề 13: Đệ quy & Đệ quy có nhớ (Mồi nhử cho Quy hoạch động).
Chuyên đề 14: Thuật toán Tham lam (Greedy) – Chiến thuật lấy điểm tối đa.
Chuyên đề 15: Chặt nhị phân (Binary Search) trên kết quả.
Chuyên đề 16: Quy hoạch động (Dynamic Programming) – Những bài toán kinh điển (Cái túi, Dãy con tăng dài nhất…).
📂 PHẦN 5: KHO ĐỀ THI THỰC CHIẾN
Chuyên đề 17: Cấu trúc đề thi thực tế.
Chuyên đề 18: Chiến thuật Subtask (Duyệt trâu lấy điểm).
Chuyên đề 19: Các lỗi mất điểm cần tránh.
Chuyên đề 20: Kho 10 đề thi trọng điểm.
Tổng hợp: 20 bộ đề thi HSG cấp tỉnh chính thức của các tỉnh thành (Hà Nội, TP.HCM, Đồng Nai, Tiền Giang…) năm 2024-2025.
Đáp án: Mã nguồn mẫu được tối ưu điểm số kèm giải thích chi tiết.
6 kinh nghiệm làm bài thi học sinh giỏi tin học tỉnh
(Nội dung về cách phân bổ thời gian, cách “duyệt trâu” ăn điểm lẻ và 10 bộ đề thi…
NỘI DUNG CHI TIẾT:
📂 PHẦN 1: LÀM CHỦ CÔNG CỤ & KỸ THUẬT PHÒNG THI
Phần này là “nền móng” giúp các em tránh những lỗi mất điểm đáng tiếc và tối ưu hóa hiệu suất làm bài trước khi bắt đầu giải các thuật toán khó.
Chuyên đề 1: Cấu trúc chương trình chuẩn để chấm máy tự động (CMS, Themis)
Để các hệ thống chấm bài tự động như Themis hay CMS hoạt động chính xác, mã nguồn cần được tổ chức gọn gàng và tránh các lỗi thực thi thừa.
Sử dụng hàm main(): Luôn đưa logic chính vào một hàm để dễ quản lý và tăng tốc độ xử lý của .
Cấu trúc chuẩn:
import sys
# Cài đặt đọc ghi file (nếu có)
# sys.stdin = open(‘TENBAI.INP’, ‘r’)
# sys.stdout = open(‘TENBAI.OUT’, ‘w’)
Lưu ý: Tuyệt đối không sử dụng các lệnh chờ như input() hoặc os.system(“pause”) ở cuối bài vì máy chấm sẽ bị treo và tính lỗi Time Limit Exceeded (TLE).
Chuyên đề 2: Kỹ thuật đọc/ghi File (.INP, .OUT) không bao giờ lỗi
Trong các kỳ thi HSG, việc sai tên File hoặc sai định dạng đọc file là lỗi phổ biến nhất khiến học sinh bị 0 điểm cả bài.
Cách 1: Chuyển hướng Standard Input/Output (Khuyên dùng)
Cách này giúp em giữ nguyên code input() và print(), chỉ cần thêm 2 dòng ở đầu bài.
import sys
sys.stdin = open(‘DULIEU.INP’, ‘r’)
sys.stdout = open(‘DULIEU.OUT’, ‘w’)
# Sau đó dùng input() và print() như bình thường
n = int(input())
print(n)
Cách 2: Sử dụng Context Manager (An toàn nhất)
Đảm bảo file luôn được đóng sau khi đọc/ghi, tránh mất dữ liệu.
with open(‘DULIEU.INP’, ‘r’) as f_in:
data = f_in.read().split()
with open(‘DULIEU.OUT’, ‘w’) as f_out:
f_out.write(str(result))
Mẹo nhỏ: Luôn kiểm tra kỹ tên file (chữ hoa, chữ thường) theo đúng yêu cầu của đề bài.
Chuyên đề 3: 10 “Tuyệt chiêu” tối ưu mã nguồn chạy nhanh như C++
thường chậm hơn C++, nhưng với 10 kỹ thuật sau, em có thể giúp bài làm đạt điểm tối đa trong giới hạn thời gian:
Đọc dữ liệu nhanh: Dùng sys.stdin.readline thay cho input().
Sử dụng List Comprehension: [i for i in range(n)] nhanh hơn nhiều so với dùng vòng lặp for và append().
Hàm có sẵn (Built-in): Luôn ưu tiên sum(), max(), min(), sorted() vì chúng được viết bằng ngôn ngữ C.
Hạn chế biến toàn cục: Sử dụng biến trong hàm sẽ nhanh hơn biến ngoài hàm.
Nối chuỗi: Dùng ”.join(list) thay vì dùng phép cộng + trong vòng lặp.
Giải nén toán tử: Dùng * để in mảng nhanh hơn: print(*arr).
Sử dụng Map: map(int, sys.stdin.read().split()) để xử lý hàng triệu con số trong tích tắc.
Tránh gọi hàm lặp lại: Thay vì for i in range(len(a)), hãy gán n = len(a) rồi dùng range(n).
Sử dụng math module: Các hàm như math.gcd(), math.sqrt() được tối ưu hóa cực tốt.
Phép toán Bit: Dùng <<, >>, &, | thay cho các phép toán số học khi có thể.
Chuyên đề 4: Cách kiểm soát thời gian và bộ nhớ trong phòng thi
Kỳ thi HSG luôn có giới hạn chặt chẽ (Ví dụ: 1.0s và 256MB). Em cần biết cách tự ước lượng:
Quy tắc “10 triệu”: Trong , hãy ước lượng máy chấm thực hiện được khoảng 10^7 phép tính mỗi giây. Nếu bài toán có N = 10^5, thuật toán O(N^2) (10 tỷ phép tính) chắc chắn sẽ bị TLE.
1. Tại sao lại bị TLE (là viết tắt của Time Limit Exceeded )?
Mỗi bài toán đều có một giới hạn thời gian và giới hạn dữ liệu (N). Máy chấm thường xử lý được khoảng 10^8 phép tính mỗi giây. Nếu thuật toán của bạn có độ phức tạp quá lớn so với N, nó sẽ quá tải.
Ví dụ thực tế:
Nếu bài toán cho N = 10^5 và thời gian là 1 giây:
Thuật toán O(N log N) chạy khoảng 1.7 x 10^6 phép tính -> Pass (Vượt qua).
Thuật toán O(N^2) chạy khoảng 10^10 phép tính -> Chắc chắn TLE (vì gấp 100 lần khả năng của máy).
2. Bảng đối chiếu nhanh để tránh TLE
Dựa vào giá trị của N trong đề bài, bạn có thể dự đoán thuật toán nào sẽ bị TLE:
Giá trị của N
Độ phức tạp tối đa cho phép
Ví dụ thuật toán
N <= 10
O(N!)
Hoán vị, quay lui vét cạn
N<= 20
O(2^N)
Duyệt phân tập, quy hoạch động trạng thái
N <= 500
O(N^3)
Nhân ma trận, Floyd-Warshall
N <= 5000
O(N^2)
Sắp xếp chọn, duyệt hai vòng lặp lồng nhau
N <= 10^6
O(N log N) hoặc O(N)
Quick Sort, Tree, Binary Search, Segment Tree
N rất lớn
O(log N) hoặc O(1)
Toán học, tìm kiếm nhị phân trên kết quả
3. Cách khắc phục khi bị TLE
Nếu bạn nhận thấy mã của mình chắc chắn sẽ bị TLE, hãy thử các hướng sau:
Tối ưu độ phức tạp: Chuyển từ vòng lặp lồng nhau O(N^2) sang dùng Map, Set hoặc kỹ thuật hai con trỏ O(N).
Sử dụng cấu trúc dữ liệu mạnh hơn: Thay vì tìm kiếm tuyến tính, hãy dùng Binary Search hoặc Segment Tree.
Tối ưu nhập/xuất: Trong C++, sử dụng ios_base::sync_with_stdio(0); cin.tie(0); để tăng tốc độ đọc dữ liệu. Tránh dùng endl mà hãy dùng \n.
Quy hoạch động: Nếu bạn đang dùng đệ quy thuần túy và bị tính lại nhiều lần, hãy dùng mảng để lưu kết quả (Memoization).
Kiểm soát đệ quy: có giới hạn độ sâu đệ quy (thường là 1000). Nếu dùng thuật toán đệ quy sâu (như DFS), phải thêm dòng:
import sys
sys.setrecursionlimit(200000)
Tiết kiệm bộ nhớ: Tránh tạo ra quá nhiều mảng phụ không cần thiết. Với các bài toán ma trận lớn, hãy cẩn thận với lỗi Memory Limit Exceeded (MLE).
Chiến thuật Subtask: Nếu không tìm được thuật toán tối ưu nhất, hãy viết thuật toán “vét cạn” (Brute Force) để lấy trọn điểm ở các Test con có dữ liệu nhỏ.
💡 Lời nhắn của Thầy Tấn Dân dành cho học sinh:
“Nắm vững 4 chuyên đề này, các em đã thắng 30% cuộc đua. Sự cẩn thận trong kỹ thuật chính là nền tảng để những ý tưởng thuật toán thăng hoa. Chúc các em luyện tập thật tốt!”
📂 PHẦN 2: SỐ HỌC (LÝ THUYẾT SỐ)
Số học là nền tảng của các bài toán Tin học. Nắm vững phần này giúp các em giải quyết gọn gàng các bài toán về dãy số, tính toán và tối ưu hóa.
Chuyên đề 5: Số nguyên tố – “Chốt chặn” của mọi đề thi
Số nguyên tố là các số chỉ chia hết cho 1 và chính nó. Trong thi HSG, chúng ta cần hai kỹ năng chính:
Kiểm tra 1 số N có là số nguyên tố hay không (O(\sqrt{N})):
Thay vì duyệt đến N, chúng ta chỉ cần duyệt đến căn bậc hai của N để tiết kiệm thời gian.
import math
def kiem_tra_so_nguyen_to(n):
if n < 2:
return False
# Duyệt từ 2 đến căn bậc hai của n
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
Sàng Eratosthenes – Tìm mọi số nguyên tố đến 10^6 (O(N log N)):
Khi đề bài yêu cầu đếm hoặc liệt kê rất nhiều số nguyên tố, kỹ thuật Sàng là bắt buộc.
def sang_so_nguyen_to(gioi_han):
# Khởi tạo danh sách toàn bộ là True (coi là số nguyên tố)
la_so_nguyen_to = [True] * (gioi_han + 1)
la_so_nguyen_to[0] = la_so_nguyen_to[1] = False
for p in range(2, int(math.sqrt(gioi_han)) + 1):
if la_so_nguyen_to[p]:
# Đánh dấu các bội của p không phải là số nguyên tố
for i in range(p * p, gioi_han + 1, p):
la_so_nguyen_to[i] = False
return la_so_nguyen_to
Chuyên đề 6: Ước chung lớn nhất (UCLN) & Bội chung nhỏ nhất (BCNN)
Đây là công cụ cực mạnh để rút gọn phân số, tìm chu kỳ hoặc giải các bài toán về chia quà, chia lưới.
UCLN: Sử dụng thuật toán Euclid (đã được tích hợp cực nhanh trong thư viện math).
BCNN: Dựa trên công thức: BCNN(a, b) = \frac{|a \times b|}{UCLN(a, b)}.
Code thực chiến:
import math
so_a = 12
so_b = 18
ucln = math.gcd(so_a, so_b) # Kết quả: 6
bcnn = (so_a * so_b) // ucln # Kết quả: 36
# Lưu ý: Từ 3.9+, math.gcd có thể tìm UCLN của nhiều số
# ucln_nhieu_so = math.gcd(12, 18, 24, 30)
Chuyên đề 7: Phân tích thừa số nguyên tố
Mọi số tự nhiên lớn hơn 1 đều có thể phân tích thành tích các số nguyên tố. Đây là cách để tìm số lượng ước số và tổng các ước số của một số.
Code phân tích thừa số nguyên tố:
def phan_tich_thua_so(n):
uoc = 2
danh_sach_thua_so = []
tam = n
while uoc * uoc <= tam:
while tam % uoc == 0:
danh_sach_thua_so.append(uoc)
tam //= uoc
uoc += 1
if tam > 1:
danh_sach_thua_so.append(tam)
return danh_sach_thua_so
Chuyên đề 8: Xử lý số siêu lớn & Lũy thừa nhanh
có thể xử lý các con số có hàng nghìn chữ số mà không lo tràn bộ nhớ như C++ hay Pascal.
Tính lũy thừa nhanh (Modular Exponentiation):
Khi đề bài yêu cầu tính a^b \pmod m với b cực lớn (ví dụ 10^{18}), chúng ta dùng hàm pow có sẵn của để đạt tốc độ tối đa.
# Tính (co_so ^ mu) chia lấy dư cho m
co_so = 2
mu = 10**18
m = 10**9 + 7
ket_qua = pow(co_so, mu, m)
# Chạy cực nhanh so với việc dùng (co_so ** mu) % m
Xử lý số có hàng nghìn chữ số:
Nếu đề bài cho số cực lớn, hãy đọc dữ liệu dưới dạng xâu (string) rồi mới chuyển sang kiểu số (int).
import sys
# Tăng giới hạn chữ số nếu số có hơn 4300 chữ số
sys.set_int_max_str_digits(10000)
so_lon = int(input()) # tự động hiểu và tính toán được ngay
💡 Lời nhắn của Thầy Tấn Dân:
“Các em hãy chú ý: Trong lập trình, không chỉ cần code đúng mà còn cần code chạy nhanh. Việc hiểu và dùng đúng các hàm như math.gcd hay pow(a, b, m) sẽ giúp các em tiết kiệm thời gian quý báu trong phòng thi để tập trung vào những câu khó hơn!”
Dạ vâng thưa Thầy Tấn Dân, đây là nội dung chi tiết cho PHẦN 3: XỬ LÝ XÂU KÝ TỰ VÀ MẢNG. Đây là phần kiến thức “xương sống”, xuất hiện trong 100% các đề thi Tin học. Em đã Việt hóa toàn bộ tên biến và giải thích cực kỳ cặn kẽ để học sinh của thầy đọc là hiểu ngay ạ.
📂 PHẦN 3: XỬ LÝ XÂU KÝ TỰ VÀ MẢNG
Xâu và Mảng là nơi lưu trữ dữ liệu. Làm chủ được hai cấu trúc này, các em đã nắm trong tay công cụ mạnh nhất để giải quyết mọi bài toán thực tế.
Chuyên đề 9: Kỹ thuật xử lý Xâu ký tự (String)
hỗ trợ xử lý văn bản cực kỳ mạnh mẽ so với C++ hay Pascal. Các em cần nhớ các kỹ thuật “cắt xẻ” sau:
Cắt xâu (Slicing): Lấy một phần của xâu mà không cần dùng vòng lặp.
xau = "ThayTanDan"
# Lấy từ đầu đến vị trí 3: xau[0:4] -> "Thay"
# Lấy xau đảo ngược: xau[::-1] -> "naDnaTyahT"
Các hàm bổ trợ “thần thánh”:
s = " lap trinh "
s = s.strip() # Loại bỏ khoảng trắng thừa ở 2 đầu
s = s.upper() # Chuyển thành chữ HOA
s = s.lower() # Chuyển thành chữ thường
dem = s.count("p") # Đếm số lần xuất hiện của chữ "p"
moi = s.replace("", "tin hoc") # Thay thế xâu
Tách và Nối xâu (Cực kỳ quan trọng để đọc dữ liệu):
dong_du_lieu = "10 20 30 40"
danh_sach_so = dong_du_lieu.split() # Tách thành ['10', '20', '30', '40']
danh_sach_chu = ["Hoc", "voi", "Thay", "Dan"]
cau_hoan_chinh = " ".join(danh_sach_chu) # Nối thành "Hoc voi Thay Dan"
Chuyên đề 10: Mảng 1 chiều và Mảng 2 chiều (List & Matrix)
Mảng là tập hợp các phần tử. Trong , chúng ta dùng List.
Khởi tạo mảng nhanh (List Comprehension):
# Tạo mảng chứa 10 số 0
mang = [0] * 10
# Tạo mảng chứa các số bình phương từ 1 đến n
n = 5
binh_phuong = [i*i for i in range(1, n+1)] # [1, 4, 9, 16, 25]
Mảng 2 chiều (Ma trận): Thường dùng để lưu bản đồ hoặc bảng số.
# Khởi tạo ma trận 3 hàng 4 cột toàn số 0
hang, cot = 3, 4
ma_tran = [[0] * cot for _ in range(hang)]
# Truy cập phần tử ở hàng i, cột j: ma_tran[i][j]
Đây là kỹ thuật giúp tính tổng một đoạn từ vị trí L đến R trong thời gian siêu nhanh O(1).
Bài toán: Cho mảng A, tính tổng các số từ A[L] đến A[R] (thực hiện Q lần vấn tin).
Cách làm: Tạo mảng tong_tien_to trong đó tong_tien_to[i] lưu tổng từ đầu đến vị trí i.
def mang_cong_don(mang_a):
n = len(mang_a)
tong_tien_to = [0] * (n + 1)
for i in range(n):
tong_tien_to[i+1] = tong_tien_to[i] + mang_a[i]
return tong_tien_to
# Để tính tổng từ L đến R (chỉ số từ 1):
# tong_doan = tong_tien_to[R] - tong_tien_to[L-1]
Chuyên đề 12: Hai con trỏ (Two Pointers)
Kỹ thuật này dùng để duyệt mảng hiệu quả, thường dùng khi mảng đã được sắp xếp.
Bài toán mẫu: Tìm một cặp số trong mảng đã sắp xếp có tổng bằng K.
def tim_cap_so(mang, k):
trai = 0
phai = len(mang) - 1
while trai < phai:
tong_hien_tai = mang[trai] + mang[phai]
if tong_hien_tai == k:
return mang[trai], mang[phai]
elif tong_hien_tai < k:
trai += 1 # Cần tổng lớn hơn nên tăng con trỏ trái
else:
phai -= 1 # Cần tổng nhỏ hơn nên giảm con trỏ phải
return None
💡 Lời nhắn của Thầy Tấn Dân:
“Các em thân mến, Xâu và Mảng giống như gạch và xi măng để xây nên ngôi nhà thuật toán. Nếu các em sử dụng thành thạo các hàm có sẵn như split(), join() hay kỹ thuật Mảng cộng dồn, tốc độ làm bài của các em sẽ nhanh hơn các bạn khác rất nhiều. Hãy luyện tập để đôi tay trở nên thuần thục nhé!”
📂 PHẦN 4: THUẬT TOÁN NÂNG CAO
Đây là những công cụ giúp các em giải quyết các bài toán phức tạp và tối ưu hóa thời gian chạy để đạt điểm tuyệt đối ở những bộ Test khó nhất.
Chuyên đề 13: Đệ quy (Recursion)
Đệ quy là việc một hàm tự gọi lại chính nó. Để không bị lặp vô hạn, mọi bài toán đệ quy phải có Điểm dừng (Base case).
Quy tắc 2 phần:
Phần dừng: Khi nào thì không cần gọi lại hàm nữa?
Phần đệ quy: Công thức liên hệ giữa bài toán lớn và bài toán nhỏ hơn.
Ví dụ: Tính Giai thừa của N (N!)
def tinh_giai_thua(n):
# Điểm dừng: 0! = 1
if n == 0:
return 1
# Phần đệ quy: n! = n * (n-1)!
return n * tinh_giai_thua(n - 1)
Lưu ý của Thầy Dân: có giới hạn độ sâu đệ quy. Nếu làm bài thi về Đồ thị hoặc Đệ quy sâu, các em nhớ thêm dòng sys.setrecursionlimit(200000) ở đầu bài nhé!
Chuyên đề 14: Thuật toán Tham lam (Greedy)
Tham lam là chiến thuật: “Tại mỗi bước, ta chọn lựa chọn tốt nhất ở thời điểm hiện tại” với hy vọng sẽ dẫn đến kết quả tốt nhất toàn cục.
Đặc điểm: Chạy rất nhanh, cài đặt đơn giản nhưng cần chứng minh tính đúng đắn.
Bài toán điển hình: Đổi tiền (với các mệnh giá là bội số của nhau), sắp xếp lịch hội nghị, nối dây thừng.
Ví dụ: Bài toán đổi tiền (Tìm số tờ tiền ít nhất)
def doi_tien(so_tien_can_doi, danh_sach_menh_gia):
# Sắp xếp mệnh giá từ lớn đến nhỏ để tham lam
danh_sach_menh_gia.sort(reverse=True)
so_to = 0
for menh_gia in danh_sach_menh_gia:
so_to += so_tien_can_doi // menh_gia
so_tien_can_doi %= menh_gia
return so_to
Chuyên đề 15: Chặt nhị phân (Binary Search)
Đây là thuật toán “quốc dân” để tăng tốc tìm kiếm từ O(N) xuống O(\log N). Điều kiện tiên quyết: Mảng phải được sắp xếp.
Code tìm kiếm vị trí của X trong mảng đã sắp xếp:
def tim_kiem_nhi_phan(mang, x):
trai = 0
phai = len(mang) - 1
while trai <= phai:
giua = (trai + phai) // 2
if mang[giua] == x:
return giua # Tìm thấy X
elif mang[giua] < x:
trai = giua + 1 # Tìm ở nửa bên phải
else:
phai = giua - 1 # Tìm ở nửa bên trái
return -1 # Không tìm thấy
Chuyên đề 16: Quy hoạch động (Dynamic Programming – Cơ bản)
Quy hoạch động là đỉnh cao của tư duy thuật toán. Bản chất là: Chia bài toán lớn thành các bài toán con và LƯU LẠI kết quả bài toán con để không phải tính lại.
Ví dụ: Dãy số Fibonacci (Tối ưu bằng cách lưu mảng)
def fibonacci_quy_hoach_dong(n):
# Tạo mảng lưu trữ kết quả các bước trước
f = [0] * (n + 1)
f[0], f[1] = 0, 1
for i in range(2, n + 1):
f[i] = f[i-1] + f[i-2] # Tính dựa trên kết quả đã có
return f[n]
Bí kíp của Thầy Dân: Nếu em thấy bài toán có thể chia nhỏ và các bài toán con bị lặp lại nhiều lần, hãy nghĩ ngay đến Quy hoạch động!
💡 Lời nhắn của Thầy Tấn Dân:
“Các em đừng sợ những cái tên như ‘Quy hoạch động’ hay ‘Chặt nhị phân’. Thực chất chúng chỉ là những cách thông minh hơn để chúng ta dặn máy tính làm việc. Hãy kiên trì code lại từng ví dụ này, các em sẽ thấy tư duy của mình ‘nhảy vọt’ chỉ sau vài lần thực hành!”
📂 PHẦN 5: KHO ĐỀ THI & CHIẾN THUẬT “VÉT ĐIỂM”
Kỹ năng giải bài rất quan trọng, nhưng kỹ năng đi thi mới là yếu tố quyết định tấm huy chương. Hãy học cách làm chủ thời gian và tâm lý!
Chuyên đề 17: Cấu trúc đề thi HSG cấp Tỉnh thông thường
Đề thi thường diễn ra trong 150 – 180 phút với 3 đến 4 câu hỏi có độ khó tăng dần:
Câu 1 (Dễ – 5/20 điểm): Thường là Số học cơ bản hoặc xử lý Xâu đơn giản. (Mục tiêu: Làm trong 15-20 phút).
Câu 2 (Trung bình – 6/20 điểm): Xử lý Mảng, Tham lam hoặc Sắp xếp. (Mục tiêu: Làm trong 30-40 phút).
Câu 3 & 4 (Khó – 9/20 điểm): Quy hoạch động, Đồ thị hoặc Hình học tính toán. Đây là câu phân loại để lấy giải Nhất, Nhì.
Chuyên đề 18: Chiến thuật “Vét điểm” (Subtask Scoring)
Trong Tin học, không phải cứ làm xong cả bài mới có điểm. Đề thi luôn chia làm nhiều Subtask (gói điểm nhỏ).
Quy tắc “Duyệt trâu” (Brute Force): Nếu em không nghĩ ra thuật toán tối ưu O(N), hãy đừng bỏ cuộc. Hãy viết một thuật toán đơn giản nhất O(N^2) hoặc O(N^3). Dù không ăn trọn điểm, em vẫn sẽ lấy được 30-50% số điểm của bài đó thay vì 0 điểm.
Ví dụ: Bài toán tìm cặp số có tổng bằng K
Cách tối ưu: Dùng Hai con trỏ hoặc Map (O(N)).
Cách “vét điểm” (Duyệt trâu): Dùng 2 vòng lặp lồng nhau (O(N^2)).
# Code "Vét điểm" - Chậm nhưng chắc chắn có điểm với N nhỏ
def vet_diem_tong_bang_k(mang, k):
n = len(mang)
for i in range(n):
for j in range(i + 1, n):
if mang[i] + mang[j] == k:
return mang[i], mang[j]
return None
Chuyên đề 19: Các lỗi “mất tiền oan” trong phòng thi
Thầy Tấn Dân dặn các em phải kiểm tra kỹ 4 điều này trước khi nộp bài:
Sai tên File: Chỉ cần sai một dấu chấm, dấu gạch dưới ở tên file .INP hoặc .OUT, bài của em sẽ bị 0 điểm ngay lập tức.
In thừa thông báo: Máy chấm tự động sẽ so khớp từng ký tự. Nếu em in thêm dòng chữ “Moi ban nhap n:” hoặc “Ket qua la:”, máy sẽ báo sai đáp án. Chỉ in đúng thứ đề bài yêu cầu.
Quên xóa lệnh Debug: Nhiều em viết lệnh print để kiểm tra lỗi lúc làm bài nhưng quên xóa khi nộp. Điều này dẫn đến sai kết quả.
Kiểu dữ liệu: tự xử lý số lớn, nhưng với số thực, hãy cẩn thận với số chữ số thập phân (dùng “{:.2f}”.format(so) để định dạng).
Chuyên đề 20: Danh mục 10 đề thi trọng điểm (Kho đề thi)
Thầy đã tổng hợp các bộ đề thi từ các tỉnh thành có phong trào Tin học mạnh nhất để các em luyện tập:
Đề 1: Chuyên đề Số học – Đề thi HSG Tỉnh Đồng Nai 2024.
Đề 2: Chuyên đề Xâu ký tự – Đề thi HSG TP. Hồ Chí Minh 2023.
Đề 3: Chuyên đề Mảng & Sắp xếp – Đề thi Olympic 30/4.
Đề 4: Chuyên đề Quy hoạch động – Đề thi thử vào Chuyên Tin.
(Và tiếp tục 6 đề thực chiến khác kèm lời giải chi tiết…)
💡 Lời nhắn cuối cùng của Thầy Tấn Dân:
“Các trò yêu quý, bước vào phòng thi, điều quan trọng nhất không phải là em biết bao nhiêu thuật toán, mà là em giữ được cái đầu lạnh. Hãy làm câu dễ thật cẩn thận để không mất điểm, sau đó bình tĩnh ‘vét’ từng điểm ở câu khó. Thầy tin tấm bằng giải Tỉnh đang chờ đợi những người kiên trì và khôn ngoan nhất. Chúc các em tự tin và chiến thắng!”
Tóm tắt 5 Bí kíp chinh phục Python cho HSG Tin Học:
Nắm Vững Cú Pháp & Cấu Trúc Dữ Liệu Căn Bản
Hiểu sâu: Không chỉ biết dùng, mà phải hiểu cách thức hoạt động của biến, kiểu dữ liệu (list, tuple, set, dictionary), vòng lặp (for, while), điều kiện (if/elif/else), hàm, lớp (OOP cơ bản).
Thực hành: Viết code thật nhiều để làm quen với cú pháp ‘Pythonic’ (dễ đọc, dễ hiểu).
Thực Hành Giải Thuật & Cấu Trúc Dữ Liệu (DS&Algo)
Trọng tâm HSG: Đây là phần quan trọng nhất. Nắm vững các thuật toán tìm kiếm (Binary Search), sắp xếp (Merge Sort, Quick Sort), quy hoạch động (DP), tham lam (Greedy), đồ thị (BFS, DFS).
Khoa học Dữ liệu/AI (nếu có): Với các đề thi hiện đại, việc biết NumPy (tính toán số học), Pandas (xử lý dữ liệu), Matplotlib/Seaborn (vẽ đồ thị) là lợi thế lớn.
Thư viện khác: Tùy đề thi có thể cần thư viện xử lý chuỗi (regex), file (os, shutil), hoặc các thư viện chuyên biệt khác.
Học Hỏi từ Các Bài Toán HSG Thực Tế
Nguồn đề: Tìm đề thi HSG Tin Học các năm trước (cấp Tỉnh/Thành phố, Quốc gia) của Việt Nam và các nước có phong trào mạnh (Mỹ, Singapore, Hàn Quốc).
Phân tích: Hiểu rõ yêu cầu, thử sức giải và so sánh với lời giải mẫu để rút kinh nghiệm.
Xây Dựng Tư Duy Thuật Toán (Problem-Solving)
Tư duy: Học cách phân tích bài toán, chia nhỏ vấn đề, tìm ra công thức/quy luật, và biến nó thành code. Python là công cụ mạnh hỗ trợ tư duy này.
Luyện tập: Tham gia các sân chơi lập trình online (Codeforces, HackerRank, VNOI) để rèn luyện tư duy liên tục.
Chúc bạn ôn tập hiệu quả và đạt kết quả cao trong kỳ thi HSG sắp tới!
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !
Cảm ơn các em đã kiên trì theo dõi hết bộ bí kíp này. Thành công trong kỳ thi HSG không chỉ dành cho người thông minh nhất, mà dành cho người chuẩn bị kỹ càng nhất.
Lớp bồi dưỡng Tin học Thầy Tấn Dân vẫn đang tuyển sinh:
Hình thức: Học Online/Trực tiếp.
Đối tượng: Học sinh lớp 6,7,8,9 ôn thi cấp Tỉnh, vào chuyên Tin.
Cam kết: Lộ trình bài bản – Tặng kho đề thi độc quyền.
1. Tại sao nên chọn Python để ôn thi HSG Tin học cấp tỉnh năm 2026-2027?
Python ngày càng trở nên phổ biến trong các kỳ thi Học sinh giỏi (HSG) Tin học nhờ cú pháp đơn giản, dễ đọc và thư viện hỗ trợ mạnh mẽ.
So với C++ hay Pascal, Python giúp học sinh rút ngắn thời gian viết code, tập trung nhiều hơn vào tư duy thuật toán.
Đặc biệt, xu hướng đề thi HSG Tin học cấp tỉnh giai đoạn 2026-2027 đang dần mở rộng ưu thế cho ngôn ngữ này.
2. Tài liệu ôn thi HSG Tin học tại Vi Tính Tân Dân bao gồm những nội dung gì?
Bộ tài liệu ôn thi HSG Tin học Tỉnh 2026-2027 được chia sẻ trong bài viết bao gồm:
Lộ trình học Python từ cơ bản đến nâng cao.
Tổng hợp các dạng thuật toán thường gặp trong đề thi cấp tỉnh.
5 bí kíp “xương máu” để tối ưu hóa thời gian làm bài.
Ngân hàng bài tập thực hành có lời giải chi tiết.
3. 5 bí kíp chinh phục Python được nhắc đến là gì?
Trong bài viết, chúng tôi đi sâu vào 5 chiến thuật cốt lõi:
Nắm vững các cấu trúc dữ liệu cơ bản (List, Dict, Set).
Thành thạo các thư viện chuẩn (Math, Bisect, Collections).
Kỹ năng tối ưu hóa độ phức tạp thuật toán (Time Complexity).
Luyện đề thực chiến với các platform uy tín.
Chiến thuật “vét điểm” thông minh trong phòng thi.
4. Người mới bắt đầu học lập trình có thể dùng bộ tài liệu này để thi HSG không?
Hoàn toàn có thể. Bộ tài liệu và các bí kíp được Vi Tính Tân Dân biên soạn phù hợp cho nhiều trình độ.
Nếu bạn là người mới, hãy bắt đầu từ phần “Lộ trình cơ bản” được đề cập trong bài để xây dựng nền tảng Python vững chắc trước khi đi vào giải thuật phức tạp.
5. Làm thế nào để tải tài liệu ôn thi HSG Tin học Python miễn phí?
Bạn có thể xem và tải trực tiếp các tài liệu, code mẫu và bài tập ôn luyện ngay tại liên kết bài viết này của Vi Tính Tân Dân.
Chúng tôi liên tục cập nhật các dạng đề mới nhất bám sát cấu trúc thi của Bộ Giáo dục cho năm học 2026-2027.
100 Bài Lập Trình Python Có Lời Giải Cơ Bản Đến Nâng Cao PDF – Học Từ Gốc, Hiểu Tận Ngọn
Nếu bạn đang tìm 100 bài lập trình Python có lời giải PDF để học từ cơ bản đến nâng cao, thì bộ tài liệu này chính là lựa chọn rất đáng giá cực kỳ phù hợp. Python là ngôn ngữ lập trình dễ học, dễ hiểu, phù hợp cho người mới bắt đầu, học sinh – sinh viên và cả người đi làm muốn chuyển hướng sang lĩnh vực công nghệ.
Với 100 bài tập Python có lời giải chi tiết, bạn sẽ từng bước nắm vững tư duy lập trình, hiểu rõ cách viết code đúng chuẩn, tránh được những lỗi thường gặp khi mới học Python. Bộ bài tập được sắp xếp từ dễ đến khó, giúp bạn học chắc kiến thức nền tảng trước khi bước sang các bài nâng cao hơn.
Không cần học lan man hay mất thời gian tìm tài liệu rời rạc, chỉ với một file PDF duy nhất, bạn có thể luyện tập Python mỗi ngày, nâng cao kỹ năng lập trình và áp dụng ngay vào thực tế học tập cũng như công việc.
Bộ bài tập này giúp người mới học Python hiểu bản chất lập trình, rèn tư duy logic và áp dụng ngay vào thực tế. Hãy tham khảo ngay các phần dưới để biết thêm chi tiết hơn!!!
Vì Sao Python Đang Được Học Nhiều Nhất Hiện Nay?
Nói thiệt với bà con mình, giờ mở máy tính ra mà không biết Python thì cũng giống như chạy xe mà không biết số vậy đó. Python giờ có mặt khắp nơi:
Lập trình phần mềm
Trí tuệ nhân tạo (AI):
AI có thể làm được gì?
AI giúp máy móc:
📚 Học từ dữ liệu
🧠 Suy luận & ra quyết định
👀 Nhận diện hình ảnh, khuôn mặt
🎤 Nghe – hiểu giọng nói
✍️ Viết văn bản, trả lời câu hỏi
🚗 Lái xe tự động
2️⃣ Ví dụ AI trong đời sống hằng ngày
🔎 Google: gợi ý tìm kiếm
📱 Facebook / TikTok: đề xuất video, bài viết
🎙️ Trợ lý ảo: Siri, Google Assistant
🧑🏫 Học tập: chấm bài tự động, trợ giảng AI
🏥 Y tế: phát hiện bệnh qua ảnh X-quang
🎮 Game: nhân vật tự chơi, tự học chiến thuật
4️⃣ AI có “thông minh như người” không?
❌ Chưa ✔️ AI chỉ giỏi trong phạm vi được huấn luyện ✔️ Không có cảm xúc, ý thức thật như con người
5️⃣ AI liên quan gì đến lập trình?
Rất liên quan 👨💻
Python là ngôn ngữ phổ biến nhất cho AI
Dùng nhiều trong thi Tin học, nghiên cứu, sản phẩm thực tế
Với nền tảng Tin học của bạn, học AI sớm là lợi thế rất lớn 🚀
Phân tích dữ liệu
Tự động hóa công việc
Dạy học cho học sinh từ tiểu học tới đại học
Hình ảnh này thầy tạo tự động bằng AI ( AI là viết tắt của Artificial Intelligence – Trí tuệ nhân tạo )
Nhưng cái khó của người mới học là:
👉 Không biết bắt đầu từ đâu 👉 Học lý thuyết hoài mà không biết làm bài tập 👉 Thiếu bài tập có lời giải rõ ràng
Hiểu được điều đó, bộ tài liệu “100 bài lập trình Python có lời giải cơ bản đến nâng cao PDF” ra đời để giải quyết đúng mấy cái khó này.
Giới Thiệu Bộ Tài Liệu 100 Bài Lập Trình Python PDF Phù hợp cho ai?
Đây là bộ tài liệu được biên soạn từ căn bản tới nâng cao, chia cấp độ rõ ràng, có lời giải chi tiết – dễ hiểu – dễ làm theo, rất phù hợp cho:
Người chưa biết gì về Python
Học sinh THCS – THPT
Sinh viên ngành CNTT
Người đi làm muốn chuyển hướng sang lập trình
Giáo viên, trung tâm tin học dùng làm tài liệu giảng dạy
Hướng dẫn tải, cài đặt và sử dụng 100 Bài Lập Trình Python:
📘 Định dạng PDF gọn nhẹ, tải về là học được liền, mở trên máy tính, điện thoại, máy tính bảng đều được.
Bấm nút Google Driver phía dưới để TẢI NGAY TÀI LIỆU100 bài lập trình python có lời giải cơ bản đến nâng cao pdf
Hoặc đường dẫn dự phòng TẢI NGAY TÀI LIỆU100 bài lập trình python có lời giải:
PyCharm EDU là phần mềm lập trình dễ sử dụng nhất mà ở Việt Nam mình đang sử dụng trong thi cấp huyện và cấp tỉnh các bạn có thể tải phần mềm ở phần bên dưới!
Tải đường dẫn tốc độ cao Google Driver !
Các bạn nào không biết có thể liên hệ mình ngay qua số điện thoại 093.717.9278 ( gặp Tấn Dân cử nhân công nghệ thông tin)
Phiên bản dành cho Windows 10 và Windows 11:
Phiên bản dành cho Windows 7:
Nội Dung đầy đủ Gồm Những Gì Trong 100 Bài Lập Trình Python?
🔹 Phần 1: Python Cơ Bản (Bài 1 – 30)
Phần này dành cho người mới, học từ từ, không bị ngợp:
Biến, kiểu dữ liệu
Câu lệnh if – else
Vòng lặp for, while
Nhập – xuất dữ liệu
Bài tập tính toán đơn giản
Xử lý chuỗi, số, danh sách
👉 Mỗi bài đều có lời giải, giải thích từng dòng code, đọc là hiểu liền, không rối não.
🔹 Phần 2: Python Trung Cấp (Bài 31 – 70)
Bắt đầu vô “đô” hơn chút, rèn tư duy lập trình:
Hàm (function)
List, tuple, dictionary
Bài toán xử lý mảng
Tìm số lớn nhất, nhỏ nhất
Bài toán thực tế gần gũi
Tối ưu code
👉 Phù hợp cho người đã biết căn bản, muốn làm bài cho cứng tay.
🔹 Phần 3: Python Nâng Cao (Bài 71 – 100)
Phần này là để lên trình:
Bài toán tổng hợp
Tư duy thuật toán
Bài tập dạng thi học sinh giỏi
Chuẩn bị cho học AI – Data – Automation
Phân tích cách giải bài toán
👉 Học xong phần này là không còn sợ Python nữa.
Tham Gia ngay nhóm Tin học trên Facebook để được hỗ trợ nhiệt tình nhất !!!
Tham Gia ngay nhóm Tin học trên Facebook để được hỗ trợ nhiệt tình
Lợi ích của bộ tài liệu 100 Bài Lập Trình Python này là gì?
Điểm Mạnh Của Bộ 100 Bài Lập Trình Python Có Lời Giải PDF
✔ Bài tập từ dễ tới khó, học không bị nản ✔ Có lời giải chi tiết, không phải đoán mò ✔ Giải thích bằng ngôn ngữ dễ hiểu, gần gũi ✔ Phù hợp tự học tại nhà ✔ Dùng được lâu dài, không lỗi thời ✔ File PDF tiện lưu trữ, in ra học
Nói nôm na là: “Tải một lần – học hoài không chán”
Ai Nên Sở Hữu Bộ Tài Liệu Này?
👉 Phụ huynh muốn con học lập trình từ sớm 👉 Học sinh chuyên Tin cần bài tập luyện thêm 👉 Sinh viên cần tài liệu thực hành Python 👉 Người đi làm muốn học thêm kỹ năng mới 👉 Trung tâm tin học cần giáo trình giảng dạy
Miễn là bạn muốn học Python cho đàng hoàng, thì bộ này rất đáng để tham khảo.
Học Python Hiệu Quả Nhất Là Phải Làm Bài Tập
Nhiều người học Python thất bại không phải vì dở, mà vì:
❌ Chỉ coi video ❌ Chỉ đọc lý thuyết ❌ Không chịu làm bài tập
Bộ 100 bài lập trình Python có lời giải PDF này giúp bạn:
👉 Đọc → Hiểu → Làm → So lại lời giải 👉 Mỗi ngày 1–2 bài là tiến bộ rõ ràng
Học kiểu này chắc tay hơn nhiều so với học lan man trên mạng.
Tải / Sở Hữu Bộ 100 Bài Lập Trình Python PDF Ở Đâu?
Bạn có thể:
Tải về để tự học tại nhà
In ra làm tài liệu học
Kết hợp học online hoặc offline
Dùng để ôn thi, luyện tập dài hạn
” 👉 Đầu tư cho kiến thức là đầu tư không bao giờ lỗ !!! “
Kết Luận
Việc học lập trình Python sẽ trở nên dễ dàng và hiệu quả hơn rất nhiều khi bạn có bộ tài liệu 100 bài lập trình Python có lời giải PDF được sắp xếp khoa học từ cơ bản đến nâng cao. Thay vì học lý thuyết khô khan, việc luyện tập qua bài tập thực tế sẽ giúp bạn nhớ lâu, hiểu sâu và áp dụng tốt hơn.
Nếu bạn đang tự học Python tại nhà, đang là học sinh – sinh viên hoặc người đi làm muốn học thêm kỹ năng lập trình, thì đây là bộ tài liệu rất đáng để tải và học nghiêm túc. Hãy dành mỗi ngày một ít thời gian luyện tập, bạn sẽ thấy khả năng lập trình Python của mình tiến bộ rõ rệt chỉ sau vài tuần.
Chúc bạn học Python hiệu quả và sớm làm chủ ngôn ngữ lập trình đang được sử dụng rộng rãi nhất hiện nay!
Nếu bạn đang tìm một tài liệu:
✔ Chuẩn từ cơ bản đến nâng cao
✔ Có lời giải rõ ràng
✔ Học được lâu dài
✔ Dễ hiểu, dễ áp dụng
Thì “100 bài lập trình Python có lời giải cơ bản đến nâng cao PDF” là lựa chọn rất đáng để bạn bắt đầu.
” Học Python không khó – khó là mình không bắt đầu !!! Bắt đầu từ ngay hôm nay, mỗi ngày một bài !
Rồi bạn sẽ thấy mình tiến bộ lúc nào không hay !!! “
Danh sách 100 bài lập trình Python có lời giải bài tập:
Bài 0 📘 Phép A + B – C?
📝 Mô tả :
Cho ba số nguyên A, B, C, hãy tính giá trị của biểu thức: A+B−C và in kết quả ra màn hình.
📥 Input
Dòng 1: Một số nguyên A
Dòng 2: Hai số nguyên B và C, cách nhau bởi một dấu cách
Với: −10 mủ 9 ≤A,B,C≤ 10 mủ 9
📤 Output
In ra một số nguyên duy nhất là kết quả của A + B − C
t=int(input())
if t==2 or t==3 or t==4:
print('Mua Xuan')
if t==5 or t==6 or t==7:
print('Mua Ha')
if t==8 or t==9 or t==10:
print('Mua Thu')
if t==11 or t==12 or t==1:
print('Mua Dong')
a=int(input())
if a>180:
print('Huu cao co')
elif a<100:
print('Nam lun cute')
else:
print('Binh thuong')
Bài 45 Tìm số ngày của một tháng
t,n=map(int,input().split())
if t==1 or t==3 or t==5 or t==7 or t==8 or t==10 or t==12:
print('31')
elif t==4 or t==6 or t==9 or t==11:
print('30')
elif t==2 and (n%400==0 or (n%4==0 and n%100!=0)):
print('29')
else:
print('28')
Bài 46 Tính nút của biển số xe?
n=list(input())
tong=0
for i in range(len(n)):
tong+=int(n[i])
print(str(tong)[-1])
if int(str(tong)[-1])<9:
print('No')
else:
print('Yes')
Bài 47 Kiểm tra số nguyên có phải là số chính phương?
import math
def ktcp(n):
if n<0:
return False
x=int(math.sqrt(n))
return x*x==n
n=int(input())
if ktcp(n):
print('Yes')
else:
print('No')
Bài 48 Kiểm tra tam giác?
a,b,c=map(int,input().split())
if a+b>c and b+c>a and c+a>b and a>0 and b>0 and c>0:
print('Yes')
if a==b and b==c:
print('Deu')
elif a==b or b==c or c==a:
print('Can')
elif a*a+b*b==c*c or c*c+b*b==a*a or a*a+c*c==b*b:
print('Vuong')
else:
print('Thuong')
else:
print('No')
Bài 49 Tính tiền taxi?
a=int(input())
if a==1:
print(12000)
elif 2<=a<=30:
print(10000*(a-1)+12000)
else:
print(9000*(a-30)+12000+10000*29)
a=int(input())
if a%2==0 and a>0:
print('Chan')
print('Duong')
elif a%2==0 and a<0:
print('Chan')
print('Am')
elif a%2!=0 and a>0:
print('Le')
print('Duong')
elif a%2!=0 and a<0:
print('Le')
print('Am')
else:
print('Chan')
print('Khong')
Bài 52 Đánh giá kết quả học tập theo tổng điểm?
a=int(input())
if a>=80:
print('Loai A')
if a>=90:
print('Xuat sac')
elif 80<=a<90:
print('Gioi')
elif 50<=a<80:
print('Loai B')
if a>=65:
print('Kha')
elif 50<=a<=65:
print('Trung binh')
else:
print('Loai C')
if a>=35:
print('Yeu')
elif a<35:
print('Kem')
Bài 53 Kiểm tra tuổi của một người đang ở giai đoạn nào?
t=int(input())
if t<18:
print('Tre em')
if t<=6:
print('Tre mam non')
elif 7<=t<=11:
print('Tre tieu hoc')
elif 12<=t<=17:
print('Tre trung hoc')
elif 18<=t<60:
print('Nguoi truong thanh')
if 18<=t<=23:
print('Sinh vien')
elif 24<=t<60:
print('Nguoi di lam')
else:
print('Nguoi cao tuoi')
if 60<=t<=62:
print('Sap nghi huu')
else:
print('Da nghi huu')
Bài 54 Tìm 2 chữ số đầu và 2 chữ số cuối?
a=input()
print(a[0]+a[1],a[1]+a[2])
Bài 55 Tìm số lớn nhất trong 4 số?
a,b,c,d=map(int,input().split())
if a==b==c==d:
print('=')
else:
print(max(max(a,b,c),max(b,c,d)))
Bài 56 Kiểm tra ba số có là 3 cạnh của một tam giác và tính chu vi, diện tích?
import math
a,b,c=map(int,input().split())
if a+b>c and b+c>a and c+a>b and a>0 and b>0 and c>0:
cv=a+b+c
p=cv/2
s=math.sqrt(p*(p-a)*(p-b)*(p-c))
print('Day la 3 canh cua mot tam giac')
print('%0.2f'%cv,'%0.1f'%s)
else:
print('Day khong phai la 3 canh cua mot tam giac')
Bài 57 Kiểm tra 2 số a, b có là 2 kích thước của hình chữ nhật và tính chu vi, diện tích?
a,b=map(int,input().split())
if a>0 and b>0:
print('Day la 2 kich thuoc cua mot hinh chu nhat')
print((a+b)*2,a*b)
elif a<0 or b<0 or (a<0 and b<0):
print('Day khong phai la 2 kich thuoc cua mot hinh chu nhat')
if a<0 and b<0:
print('a va b la so am')
elif a<0:
print('a la so am')
elif b<0:
print('b la so am')
Bài 58 In ra các chữ số lẻ của một số có 8 chữ số?
a=list(input())
b=[]
for i in range(len(a)):
if int(a[i])%2!=0:
b.append(a[i])
if len(b)==0:
print('-')
else:
print(*b)
Bài 59 Tính tổng các chữ số chẵn của một số có 8 chữ số?
a=list(input())
b=[]
for i in range(len(a)):
if int(a[i])%2==0:
b.append(a[i])
if len(b)==0:
print('-')
else:
tong=0
for i in range(len(b)):
tong+=int(b[i])
print(tong)
Bài 60 Tìm chữ số lớn nhất và nhỏ nhất của một số có 8 chữ số?
a=list(input())
print(max(a),min(a))
Bài 61 In những số tự nhiên từ 1 đến n?
a=int(input())
for i in range(1,a+1):
print(i,end=' ')
Bài 62 Tính tổng những số tự nhiên từ 1 đến n?
n=int(input())
tong=0
for i in range(1,n+1):
tong+=i
print(tong)
Bài 63 In những số tự nhiên chia hết cho 3 từ 1 đến n?
n=int(input())
for i in range(1,n+1):
if i%3==0:
print(i,end=' ')
Bài 64 Đếm số lượng số tự nhiên chia hết cho 3 từ 1 đến n?
n=int(input())
dem=0
for i in range(1,n+1):
if i%3==0:
dem+=1
print(dem)
Bài 65 Tính tổng những số tự nhiên chẵn từ 1 đến n?
n=int(input())
tong=0
for i in range(1,n+1):
if i%2==0:
tong+=i
print(tong)
Bài 66 Tính tổng những số tự nhiên chia hết cho 3 và 5 từ 1 đến n?
n=int(input())
tong=0
for i in range(1,n+1):
if i%3==0 and i%5==0:
tong+=i
print(tong)
Bài 67 Tính tổng những số tự nhiên chia hết cho 3 hoặc 5 từ 1 đến n?
n=int(input())
tong=0
for i in range(1,n+1):
if i%3==0 or i%5==0:
tong+=i
print(tong)
Bài 68 Tính trung bình cộng những số tự nhiên chẵn từ 1 đến n?
n=int(input())
a=[]
for i in range(1,n+1):
if i%2==0:
a.append(i)
if sum(a)==0:
print('0')
else:
print(int(sum(a)/len(a)))
Bài 69 Tính trung bình cộng những số tự nhiên chia hết cho 5 từ 1 đến n?
n=int(input())
a=[]
for i in range(1,n+1):
if i%5==0:
a.append(i)
if sum(a)==0:
print('0.0')
else:
print('%0.1f'%(sum(a)/len(a)))
Bài 70 Tính trung bình cộng những số tự nhiên chia hết cho 3 và 5 từ 1 đến n?
n=int(input())
a=[]
for i in range(1,n+1):
if i%3==0 and i%5==0:
a.append(i)
if sum(a)==0:
print('0.0')
else:
print('%0.1f'%(sum(a)/len(a)))
Bài 71 In những số tự nhiên từ m đến n?
m=int(input())
n=int(input())
for i in range(m,n+1):
print(i,end=' ')
Bài 72 Tính tổng những số nguyên từ m đến n?
m=int(input())
n=int(input())
tong=0
for i in range(m,n+1):
tong+=i
print(tong)
Bài 73 Đếm số lượng số nguyên chia hết cho 3 từ m đến n?
m=int(input())
n=int(input())
dem=0
for i in range(m,n+1):
if i%3==0:
dem+=1
print(dem)
Bài 74 In những số nguyên chẵn từ m đến n?
m=int(input())
n=int(input())
for i in range(m,n+1):
if i%2==0:
print(i,end=' ')
Bài 75 Đếm số lượng số nguyên chẵn từ m đến n?
m,n=map(int,input().split())
a=[]
for i in range(m,n+1):
if i%2==0:
a.append(i)
print(len(a))
Bài 76 Tính tổng những số nguyên chẵn từ m đến n?
m,n=map(int,input().split())
tong=0
for i in range(m,n+1):
if i%2==0:
tong+=i
print(tong)
Bài 77 Tính trung bình cộng những số nguyên chẵn từ m đến n?
m,n=map(int,input().split())
a=[]
for i in range(m,n+1):
if i%2==0:
a.append(i)
if sum(a)==0:
print('0')
else:
print(int(sum(a)/len(a)))
Bài 78 Tính trung bình cộng những số nguyên chia hết cho 2 và 3 từ m đến n?
m,n=map(int,input().split())
a=[]
b=[]
for i in range(m,n+1):
if i%2==0 and i%3==0:
a.append(i)
if i%5==0:
b.append(i)
print(sum(b),end=' ')
if sum(a)==0:
print('0')
else:
print(int(sum(a)/len(a)))
Bài 79 Tính trung bình cộng những số nguyên chia hết cho 2 hoặc 3 từ m đến n?
m,n=map(int,input().split())
a=[]
b=[]
for i in range(m,n+1):
if i%2==0 or i%3==0:
a.append(i)
if i%7==0:
b.append(i)
print(len(b),end=' ')
if sum(a)==0:
print('0.0')
else:
print('%0.1f'%(sum(a)/len(a)))
Bài 80 Đếm số nguyên chia hết cho 5 và in những số nguyên chia hết cho 5 từ m đến n?
m,n=map(int,input().split())
a=[]
for i in range(m,n+1):
if i%5==0:
a.append(i)
print(len(a),'-',*a)
Bài 81 Tìm ước chung lớn nhất của hai số nguyên a và b?
import math
a,b=map(int,input().split())
print(math.gcd(a,b))
Bài 82 Rút gọn phân số?
import math
a,b=map(int,input().split())
c=math.gcd(a,b)
print(a//c,'/',b//c,sep='')
Bài 83 Tìm số lượng chữ số của một số nguyên n?
a=list(input())
print(len(a))
Bài 84 In các chữ số của một số nguyên n?
a=list(input())
print(*a)
Bài 85 Tính tổng các chữ số của một số nguyên n?
a=input()
tong=0
for i in range(len(a)):
tong+=int(a[i])
print(tong)
Bài 86 In các chữ số chẵn của một số nguyên n?
a=input()
for i in range(len(a)):
if int(a[i])%2==0:
print(a[i],end=' ')
Bài 87 Tính tổng các chữ số chẵn của một số nguyên n?
a=input()
tong=0
for i in range(len(a)):
if int(a[i])%2==0:
tong+=int(a[i])
print(tong)
Bài 88 Tính tổng các chữ số lớn hơn số x của một số nguyên n?
a,b=map(str,input().split())
tong=0
for i in range(len(a)):
if int(a[i])>int(b):
tong+=int(a[i])
print(tong)
Bài 89 Đếm số lượng chữ số lẻ của một số nguyên n?
a=input()
dem=0
for i in range(len(a)):
if int(a[i])%2!=0:
dem+=1
print(dem)
Bài 90 Đảo ngược chữ số của một số nguyên n?
a=input()
print(a[::-1])
Bài 91 Tìm chữ số lớn nhất của một số nguyên n?
a=list(input())
print(max(a))
Bài 92 Tìm chữ số nhỏ nhất của một số nguyên n?
a=list(input())
print(min(a))
Bài 93 Tìm chữ số lẻ lớn nhất của một số nguyên n?
a=list(input())
b=[]
for i in range(len(a)):
if int(a[i])%2!=0:
b.append(a[i])
if len(b)==0:
print('-')
else:
print(max(b))
Bài 94 Tìm chữ số chẵn nhỏ nhất của một số nguyên n?
a=list(input())
b=[]
for i in range(len(a)):
if int(a[i])%2==0:
b.append(a[i])
if len(b)==0:
print('-')
else:
print(min(b))
Bài 95 Tính số gốc của một số nguyên n?
a=list(input())
while len(a)>1:
tong=0
for i in range(len(a)):
tong+=int(a[i])
if len(str(tong))>1:
a=list(str(tong))
else:
a=str(tong)
print(a)
Bài 96 In ra k số nguyên dương chẵn đầu tiên?
n=int(input())
for i in range(0,n*2-1,2):
print(i)
Bài 97 Tìm số chia hết cho 3 mà không chia hết cho 9 thứ k?
def ktnt(n):
i=2
while i*i<=n and n%i!=0:
i+=1
return i*i>n and n>1
a=int(input())
dem=0
tong=0
i=2
while dem<a:
if ktnt(i) and ktnt(i+2):
tong+=i
dem+=1
i+=1
print(tong)
Bài 99 Tính trung bình cộng k số tự nhiên đầu tiên không chia hết cho 3?
a=int(input())
dem=0
tong=0
i=0
while dem<a:
if i%3!=0:
tong+=i
dem+=1
i+=1
print('%0.1f'%(tong/dem))
Bài 100 Tính số tháng gửi tiền tiết kiệm để được số tiền n?
a,b=map(int,input().split())
dem=0
while b>a:
a=a*2/100+a
dem+=1
print(dem)
Nguồn : https://xn--300bicode-t1a.vn/; tác giả: Trần Phí An Bình
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !
❓ 100 bài lập trình Python có lời giải này có phù hợp cho người mới không?
➡ Hoàn toàn phù hợp. Bộ tài liệu được biên soạn từ những bài tập Python cơ bản nhất như biến, vòng lặp, điều kiện, hàm… giúp người mới học Python dễ tiếp cận, dễ hiểu và không bị “ngợp”.
❓ Tài liệu bài tập Python PDF này có lời giải chi tiết không?
➡ Có đầy đủ lời giải. Mỗi bài tập đều kèm theo hướng dẫn và lời giải rõ ràng, giúp bạn hiểu cách suy nghĩ, cách viết code và cách tối ưu chương trình Python đúng chuẩn.
❓ Nên học 100 bài tập Python này trong bao lâu là hợp lý?
➡ Trung bình bạn có thể học trong 20 – 30 ngày, mỗi ngày 3–5 bài. Nếu học đều đặn, bạn sẽ nắm vững nền tảng Python và đủ tự tin làm các bài tập nâng cao hơn.
❓ Học xong 100 bài Python này có thể làm được gì?
➡ Sau khi hoàn thành, bạn có thể:
Viết chương trình Python cơ bản
Hiểu tư duy lập trình
Làm bài tập ở trường
Học tiếp Python nâng cao, AI, Data, Web
❓ Có cần biết lập trình trước khi học tài liệu này không?
➡ Không cần. Chỉ cần biết sử dụng máy tính cơ bản là có thể học được. Tài liệu phù hợp cho người bắt đầu từ con số 0.
100 Đề Tổng Hợp Thi Tin Học Ứng Dụng Cơ Bản – Đại học Khoa Học Tự Nhiên – Trắc Nghiệm & Thực Hành (Bản Mới Nhất)
Trong thời buổi công nghệ số chạy nhanh như gió, chuyện cầm trong tay một cái chứng chỉ Tin học cơ bản gần như là “Tấm Vé Thông Hành” để đi học, đi làm, đi thi tuyển. Và nếu bạn đang muốn tìm Đề thi Tin học cơ bản Đại học Khoa Học Tự Nhiên, hay đang loay hoay kiếm tài liệu ôn thi chứng chỉ tin học cơ bản, thì bạn tới đúng chỗ rồi đó.
Bài viết này tôi tổng hợp 100 đề thi Tin học Ứng dụng cơ bản, bám sát chuẩn của Đại học Khoa Học Tự Nhiên (KHTN), đi kèm mẹo làm bài, ngân hàng câu hỏi trắc nghiệm, đề thực hành Word – Excel – PowerPoint, nói chung là đủ “tất tần tật” để bạn ôn từ A tới Á.
Giờ mà bạn đi xin việc, gần như ngành nào cũng đòi hỏi phải biết: – Soạn thảo Word – Xử lý số liệu Excel – Làm trình chiếu PowerPoint – Kiến thức máy tính – mạng – hệ điều hành
Đó chính là lý do chứng chỉ Tin học cơ bản quan trọng đến vậy, và nhóm Đề thi Tin học cơ bản Đại học Khoa Học Tự Nhiên luôn được sinh viên, học viên, người đi làm săn lùng nhiều nhất.
Nếu bạn đang muốn: ✔ Thi công chức, viên chức ✔ Thi tuyển sinh đầu vào đại học – cao đẳng ✔ Hoặc chỉ đơn giản là nâng trình tin học để tự tin hơn
…thì bộ “100 Đề Tổng Hợp Thi Tin Học Ứng Dụng cơ bản” dưới đây sẽ giúp bạn ôn một lèo từ lý thuyết đến thực hành.
2. Bộ 100 đề – đầy đủ trắc nghiệm, thực hành Word – Excel – PowerPoint
2.1. Ngân hàng trắc nghiệm lớn: 300 câu + 800 câu + đề KHTN chuẩn
Khi thi trắc nghiệm Tin học cơ bản, đề thường lấy từ:
300 câu hỏi trắc nghiệm tin học có đáp án (phần lớn về Windows, Word, Excel, PowerPoint, Internet):
800 câu hỏi trắc nghiệm tin học cơ bản (bao phủ từ phần cứng – phần mềm – hệ điều hành – thao tác văn phòng)
Ngân hàng câu hỏi trắc nghiệm CNTT cơ bản (chuẩn theo Thông tư 03 – 2014 và chuẩn IC3)
Nên học ba bộ này là coi như “vào phòng thi gặp toàn người quen”, không bất ngờ.
Tôi gom lại và sắp xếp theo chủ đề để bạn dễ cày, khỏi phải chạy tìm mỗi nơi một ít.
2.2. Bộ đề thực hành – phần quan trọng nhất
Phần thực hành thường chiếm 50% tổng điểm. Rớt phần này coi như… vỡ trận cả bài. Vì vậy tôi đưa vào trọn bộ:
De thi thực hành tin học cơ bản có đáp án
Đề thực hành Word – căn dòng, tạo mục lục, xử lý văn bản
Đề thực hành Excel – hàm IF, SUMIF, VLOOKUP, xử lý dữ liệu dạng bảng
Đề thực hành PowerPoint – tạo slide master, chèn hình, chèn hiệu ứng, tạo liên kết
Những đề này bám sát chuẩn thi thật của Đại học Khoa Học Tự Nhiên
3. Mẹo thi tin học cơ bản – học nhanh nhớ lâu
Nhiều bạn học rất nhiều nhưng khi vào thi vẫn “quên béng”. Nguyên nhân: ôn lan man, không có chiến lược.
Dưới đây là mẹo thi tin học cơ bản mà học viên tôi test nhiều lần và rút ra:
🔸 Mẹo 1: Học theo bảng tổng hợp – không học lan man
Đừng đọc sách dày 300 trang, chỉ cần học theo:
Tắt máy, bật máy đúng cách
Copy – paste – move
Định dạng Word (đậm, nghiêng, gạch chân, giãn dòng, Tab, Bullet)
Excel (5 hàm quan trọng: IF, VLOOKUP, SUM, AVERAGE, COUNTIF)
PowerPoint (chèn ảnh, tạo slide, hiệu ứng)
Thi chủ yếu xoay quanh mấy thứ này.
🔸 Mẹo 2: Làm đi làm lại đề của Đại học Khoa Học Tự Nhiên
Tại sao?
Vì bộ Đề thi Tin học cơ bản Đại học Khoa Học Tự Nhiên được thiết kế rất sát kỹ năng thực tế: – Word dùng tabstop, spacing, table – Excel làm thống kê theo bảng giá – PowerPoint tạo slide master đúng chuẩn
Thi 3–4 đề là quen tay ngay.
🔸 Mẹo 3: Với Excel – luyện sai nhiều mới giỏi
Excel không thể học bằng cách “đọc thôi”. Phải làm → sai → sửa → nhớ.
Gợi ý: Hãy tải bộ De thi thực hành tin học cơ bản có đáp án, rồi tự bấm giờ như thi thật.
🔸 Mẹo 4: Trắc nghiệm? Đọc trước từ cuối câu
Câu trắc nghiệm thường đánh vào từ khóa: Ví dụ: “Phím tắt để lưu văn bản?” Bạn chỉ cần đọc chữ “lưu” → chọn ngay Ctrl + S.
Tương tự với mạng, file, dữ liệu…
4. Nội dung chi tiết 100 đề Tin học ứng dụng cơ bản Có Cập Nhật Thường Xuyên Ngày 4/5/2026
Dưới đây là phần mô tả tổng quan nội dung trong bộ 100 đề bạn sẽ nhận:
4.1. Phần Word – 30 đề
Gồm các dạng:
Định dạng đoạn văn, tiêu đề, giãn dòng
Tạo mục lục bằng Tabstop
Tạo bảng, chèn ảnh
Tạo lưu đồ, sơ đồ khối
Chèn công thức toán (Equation)
Tạo header – footer – page number
Đối tượng phù hợp: người mới học, học viên ôn KHTN, công chức.
4.2. Phần Excel – 40 đề
Các bài tiêu biểu:
Tính tổng, trung bình, đếm theo điều kiện
Tách chuỗi, lấy ký tự theo yêu cầu
Dùng hàm IF, AND, OR, VLOOKUP, HLOOKUP
Tạo bảng thống kê cuối bài
Định dạng dữ liệu – số thập phân – nghìn phân cách
Đặc biệt bộ đề này có đáp án công thức rõ ràng, giúp bạn hiểu chứ không phải làm mò.
4.3. Phần PowerPoint – 30 đề
Yêu cầu thường gặp:
Tạo slide master
Thêm hiệu ứng cho text và hình
Chèn âm thanh – video
Tạo nút liên kết slide (Action Button)
Định dạng footer, date, slide number
Hầu hết đúng chuẩn format thi của Khoa học Tự nhiên.
5. Tài liệu kèm theo – hỗ trợ đắc lực khi ôn thi
Khi tải trọn bộ 100 đề, bạn sẽ được thêm:
✔ Tài liệu ôn thi chứng chỉ tin học cơ bản (lý thuyết đầy đủ) ✔ File PDF, DOC, Excel để tự luyện ✔ Bộ trắc nghiệm 800 câu ✔ Bộ trắc nghiệm 300 câu có đáp án ✔ Ngân hàng câu hỏi CNTT cơ bản ✔ De thi thực hành tin học cơ bản (nhiều dạng khác nhau)
Bạn không cần tìm thêm ở đâu nữa – tất cả gói gọn trong một bộ duy nhất.
6. Ai nên dùng bộ đề này?
Sinh viên chuẩn bị thi Tin học đại cương
Học viên cần chứng chỉ để xin việc
Người thi công chức, viên chức
Giáo viên muốn lấy chuẩn CNTT
Người đi làm muốn nâng kỹ năng văn phòng
Cứ ai cần Tin học là dùng được hết.
7. Kết luận – Một bộ đề đủ để bạn tự tin đi thi
Thực ra thi Tin học cơ bản không hề khó, chỉ cần đúng tài liệu, đúng phương pháp. Bộ “100 Đề Tổng hợp thi Tin học Ứng dụng cơ bản Đại học Khoa Học Tự Nhiên – Trắc nghiệm” được tạo ra để bạn:
Học nhanh
Dễ hiểu
Làm bài chắc
Thi là đậu
Tham Gia ngay nhóm Tin học trên Facebook để được hỗ trợ nhiệt tình nhất !!!
Tham Gia ngay nhóm Tin học trên Facebook để được hỗ trợ nhiệt tình
Thực hành Đề số 1:
Thực hành Đề số 2:
Thực hành Đề số 3:
Thực hành Đề số 4:
Thực hành Đề số 5:
Thực hành Đề số 6:
Thực hành Đề số 6:
Thực hành Đề số 7:
Thực hành Đề số 8:
Thực hành Đề số 9:
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !
Câu hỏi thường gặp (FAQ) 100 Đề Tổng Hợp Thi Tin Học Ứng Dụng:
1. Bộ 100 đề thi này có sát với đề thi thật tại ĐH Khoa học Tự nhiên không?
Trả lời: Có. Bộ đề được tổng hợp và biên soạn dựa trên cấu trúc đề thi thực tế tại Trung tâm Tin học – ĐH Khoa học Tự nhiên TP.HCM. Nội dung bao gồm đầy đủ 3 phần: Windows, Word, Excel và Powerpoint, cập nhật theo định dạng mới nhất.
2. Tôi có thể tải bộ đề thi này miễn phí không?
Trả lời: Hoàn toàn miễn phí. Tại website Vi tính Tấn Dân, chúng tôi chia sẻ bộ 100 đề thi dưới dạng file PDF/Word để các bạn sinh viên dễ dàng ôn tập và thực hành tại nhà mà không tốn bất kỳ chi phí nào.
3. Đề thi Tin học ứng dụng cơ bản gồm những nội dung gì?
Trả lời: Cấu trúc bài thi thường chia làm 2 phần:
Trắc nghiệm: Kiểm tra kiến thức tổng quát về máy tính, mạng và hệ điều hành.
Thực hành: Yêu cầu soạn thảo văn bản (Word), thiết lập bảng tính và công thức (Excel), tạo bài trình chiếu (Powerpoint).
4. Có lời giải chi tiết cho các đề thi này không?
Trả lời: Trong bộ tài liệu, chúng tôi có đính kèm đáp án cho phần trắc nghiệm và các tệp dữ liệu mẫu để bạn đối chiếu kết quả phần thực hành Excel, giúp bạn tự đánh giá năng lực trước khi thi thật.
5. Nên ôn tập trong bao lâu để thi đậu chứng chỉ Tin học cơ bản?
Trả lời: Tùy vào nền tảng của bạn, nhưng thông thường nếu luyện tập kỹ khoảng 10-15 đề trong bộ “100 đề tổng hợp” này trong vòng 1-2 tuần, bạn hoàn toàn có thể tự tin đạt kết quả cao.
⭐ Giới thiệu: Laptop lỗi ngay lúc đang gấp? Đừng hoảng!
Laptop đang dùng ngon bỗng nhiên nóng ran, chạy chậm, giật lag, đứng máy hay thậm chí nhấn nút nguồn nhưng không lên? Bạn lo lắng không biết laptop hỏng nặng hay chỉ lỗi nhẹ? Tin vui là 70% sự cố laptop hoàn toàn có thể tự sửa tại nhà mà không cần kỹ thuật.
Trong bài này, Vi Tính Tân Dân sẽ hướng dẫn bạn 5 mẹo sửa laptop tại nhà đơn giản – chính xác – dễ hiểu. Dù bạn là học sinh, sinh viên, nhân viên văn phòng hay người lớn tuổi cũng có thể tự làm được.
Chỉ cần 5 phút để giúp laptop chạy nhanh, mát và ổn định trở lại!
✅ 1. Laptop chạy chậm – Nguyên nhân phổ biến nhất và cách xử lý nhanh
Laptop sử dụng lâu ngày thường chậm dần vì:
Ổ cứng HDD quá chậm
Nhiều phần mềm chạy ngầm
RAM đầy
Virus hoặc file rác quá nhiều
Cách tự xử lý tại nhà:
✔ Xóa file rác trong 1 phút
Bấm tổ hợp: Windows + R → gõ temp → Enter → Xóa hết
Làm tương tự với:
%temp%
prefetch
File rác xóa đi không ảnh hưởng hệ thống.
✔ Tắt phần mềm chạy ngầm
Chuột phải thanh Taskbar → Task Manager
Chọn tab Startup
Tắt các phần mềm không cần như: – Zalo – OneDrive – Adobe Update – Steam (nếu không dùng)
✔ Gỡ ứng dụng nặng gây lag
Vào Control Panel → Programs → Uninstall Gỡ những thứ bạn không dùng.
✔ Nâng cấp ổ cứng lên SSD (hiệu quả x10)
Nếu laptop vẫn chậm sau khi dọn dẹp → 80% nguyên nhân là HDD quá chậm. Nâng lên SSD giúp:
Khởi động máy từ 40s → 8s
Mở ứng dụng siêu nhanh
Giảm giật lag khi đa nhiệm
Gợi ý: Nếu bạn ở Đồng Tháp, Vi Tính Tân Dân nhận nâng cấp tận nơi.
✅ 2. Laptop nóng quá mức – Cách tự làm mát cực hiệu quả
Laptop nóng khiến:
Máy chạy chậm
Quạt kêu lớn
Treo hoặc tắt máy
Giảm tuổi thọ linh kiện
Dấu hiệu laptop quá nóng:
Phần kê tay nóng bỏng
Quạt kêu như “máy bay”
Laptop sập nguồn khi chạy nặng
FPS tụt mạnh khi chơi game
Cách giảm nóng tại nhà:
✔ Vệ sinh laptop (6 tháng/lần)
Bụi bám dày làm:
Quạt yếu
Tản nhiệt kém
Máy nóng lên 80–90 độ
Nếu bạn có dụng cụ, bạn có thể:
Tháo nắp lưng
Thổi bụi quạt → heatsink
Lau sạch khe tản nhiệt
✔ Thay keo tản nhiệt
Keo cũ khô → CPU/GPU nóng bất thường. Việc này nên để kỹ thuật làm để tránh gãy chân CPU.
✔ Dùng kê tản nhiệt
Mẹo siêu rẻ nhưng hiệu quả:
Tăng luồng gió
Giảm 8–12 độ
✔ Không đặt laptop lên giường/mền
Bề mặt mềm bịt hết khe hút gió → nóng & tắt máy.
✅ 3. Laptop không lên nguồn – Tự kiểm tra lỗi nhanh trước khi mang ra tiệm
Đây là lỗi khiến nhiều người hoang mang nhất.
Nguyên nhân phổ biến:
Lỗi PIN
Lỗi Adapter (sạc)
Lỗi RAM
Lỗi nguồn main
Laptop bị xả pin sâu
Cách kiểm tra tại nhà:
✔ Cách 1: Kiểm tra sạc
Đèn sạc có sáng không?
Dây sạc có bị gập hoặc đứt?
Đổi ổ cắm khác thử
✔ Cách 2: Khởi động cưỡng bức
Rút sạc
Nhấn nút nguồn giữ 20 giây
Gắn lại sạc
Bật máy
Cách này giúp reset nguồn, rất hiệu quả.
✔ Cách 3: Tháo RAM – Gắn lại
RAM lỏng → laptop bật không lên.
Cách làm:
Tháo nắp dưới
Rút RAM
Lau chân RAM
Gắn lại đúng khớp
✔ Cách 4: Kiểm tra màn hình
Laptop vẫn chạy nhưng màn hình không sáng? Thử:
Chiếu đèn điện thoại lên màn hình
Nếu thấy mờ → lỗi cáp hoặc màn hình
✔ Khi nào cần gọi kỹ thuật?
Máy không lên dù đã thử hết
Có mùi khét nhẹ
Sạc không vào điện
Máy tắt sau 3–5 giây
Liên hệ Vi Tính Tân Dân để kiểm tra nhanh.
✅ 4. Lỗi bàn phím laptop – Cách tự xử lý 80% lỗi nhẹ
Các triệu chứng:
Một vài phím không bấm được
Gõ một chữ ra nhiều chữ
Bàn phím loạn, tự nhảy
Bị kẹt phím
Cách xử lý tại nhà:
✔ Bước 1: Khởi động lại laptop
Nhiều trường hợp phần mềm bị xung đột.
✔ Bước 2: Tháo phím và vệ sinh nhẹ
Dùng chổi mềm hoặc cọ trang điểm nhẹ nhàng.
✔ Bước 3: Kiểm tra driver bàn phím
Chuột phải This PC → Manage → Device Manager
Chọn Keyboard
Uninstall → Restart Máy sẽ tự cài driver mới.
✔ Bước 4: Dùng bàn phím rời
Nếu cần gấp → dùng tạm để làm việc.
✔ Khi nào phải thay bàn phím?
Liệt nhiều phím
Nước đổ vào bàn phím
Bàn phím nhảy loạn liên tục
Vi Tính Tân Dân có dịch vụ thay bàn phím tận nơi.
✅ 5. Vệ sinh laptop tại nhà – Hướng dẫn đúng cách cho người mới
Bạn có thể tự vệ sinh ở mức cơ bản:
✔ Dụng cụ cần có:
Chổi mềm
Khăn khô
Bình xịt khí nén
Tăm bông
Cách làm đúng:
Tắt nguồn laptop
Lau mặt phím bằng khăn khô
Dùng khí nén xịt vào khe phím
Xịt khe tản nhiệt và lỗ hút gió
Lau màn hình bằng khăn microfiber
Lưu ý: Không dùng cồn mạnh hoặc nước vì dễ gây hư phím và màn hình.
Nếu muốn vệ sinh sâu hơn (mở máy – thay keo – làm sạch quạt) thì nên để kỹ thuật thực hiện.
⭐ Khi nào nên gọi kỹ thuật?
Laptop chậm bất thường
Máy nóng quá mức dù mới mở
Không lên nguồn, tự tắt
Ổ cứng kêu lạch cạch
Bàn phím loạn
Màn hình tối mờ
Đừng cố mở máy khi không có kinh nghiệm, vì có thể làm gãy socket, nứt main hoặc hỏng cáp màn hình.
CTA – LIÊN HỆ SỬA LAPTOP ONLINE/TẬN NƠI
Liên hệ ngay Vi Tính Tân Dân để được hỗ trợ sửa laptop online hoặc tận nơi nhanh chóng – chuyên nghiệp – giá rẻ! Website: vitinhtandan.com Zalo/SDT: 0937179278 Địa chỉ: Ấp Cá, Chợ Tân Hiệp, T.T Tân Hiệp, Châu Thành, Đồng Tháp Hỗ trợ 24/7 – Có mặt nhanh – Uy tín hàng đầu.
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !
Bạn đang dùng PC thì đột nhiên đơ, chậm, xoay vòng mãi không vào Windows? Hay bật máy mà chỉ thấy màn đen khiến bạn hoang mang không biết máy hỏng nặng hay chỉ lỗi nhẹ? Tin vui là rất nhiều lỗi PC có thể tự sửa ngay tại nhà chỉ với vài bước đơn giản. Trong bài này, Vi Tính Tân Dân sẽ chia sẻ 7 mẹo vàng mà ngay cả người “mù công nghệ” cũng áp dụng được – giúp bạn tiết kiệm thời gian, tránh mất tiền oan và biết chính xác khi nào cần gọi kỹ thuật.
1. Kiểm tra nguồn điện – Nguyên nhân số 1 khiến PC không lên
Nhiều người nghĩ PC hỏng nặng, nhưng thực tế 70% lỗi không lên nguồn đến từ những thứ rất nhỏ: dây nguồn lỏng, ổ cắm hư, công tắc sau PSU bị tắt.
Cách xử lý:
Kiểm tra và cắm chặt dây nguồn
Đổi sang ổ cắm khác
Bật nút ON phía sau bộ nguồn
Nếu vẫn không lên, khả năng cao nguồn bị yếu hoặc hư tụ – cần kỹ thuật kiểm tra.
2. Làm sạch RAM – Cách sửa lỗi treo logo Windows nhanh nhất
Nếu PC bật lên nhưng treo màn hình hoặc tự tắt, RAM có thể bị oxi hóa chân tiếp xúc.
Cách làm:
Tắt nguồn
Tháo RAM
Lau chân RAM bằng tẩy trắng hoặc khăn khô
Gắn lại thật chặt
Mẹo nhỏ nhưng cực kỳ hiệu quả!
3. Dọn rác, gỡ ứng dụng nặng – PC mượt như mới
PC dùng 1–2 năm không dọn rác chắc chắn chậm. Bạn hãy:
Xóa file rác bằng Disk Cleanup
Gỡ ứng dụng không cần thiết
Chặn phần mềm chạy ngầm
4. Kiểm tra ổ cứng – Nguyên nhân gây treo, khởi động chậm
Nếu nghe tiếng “lạch cạch”, khả năng ổ HDD lỗi. Nên nâng cấp lên SSD để tăng tốc gấp 5–10 lần.
5. Vệ sinh PC – Giảm nóng, tăng tốc
Bụi làm CPU nóng, quạt chạy yếu, máy lag.
Giải pháp: mở thùng – thổi bụi – thay keo tản nhiệt mỗi 6–12 tháng.
6. Kiểm tra virus – Thủ phạm âm thầm
Cài Malwarebytes, Windows Defender hoặc BKAV để quét toàn hệ thống.
7. Khi nào nên gọi kỹ thuật?
PC không lên
PC tắt liên tục
Ổ cứng báo đỏ
Màn hình không nhận tín hiệu
Máy quá nóng bất thường
CTA – LIÊN HỆ NGAY
Liên hệ Vi Tính Tân Dân để được hỗ trợ sửa máy online hoặc tận nơi nhanh chóng, chuyên nghiệp, giá rẻ! Website: vitinhtandan.com Zalo/SDT: 0937179278 Địa chỉ: Ấp Cá, Chợ Tân Hiệp, T.T Tân Hiệp, Châu Thành, Đồng Tháp Hỗ trợ 24/7 – Có mặt nhanh – Uy tín hàng đầu.
Nếu bạn thấy hay ! xin bạn 1 phút ! vui lòng đánh giá 5 sao cho trang website của chúng tôi ! để có động lực làm thêm nhiều bài hay nữa ! cảm ơn quý khách nhé !