1 Học Python - Đề thi học sinh giỏi Tin Học THCS Tỉnh Tiền Giang
DANH SÁCH TÓM TẮT:
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)
Các đề ôn thi để chuẩn bị thi Cấp Huyện thì các em vào đường dẫn phía dưới để tham khảo giúp thầy nhé!
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.
|
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:
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
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:
Ví dụ:
STRING.INP | STRING.OUT |
m2aC0ma2T3 | TamCam 0223 |
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:
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)
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:
Kết quả: Ghi ra file TRIANGLE.OUT gồm:
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 |
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:
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:
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:……………………………………………………………………..
Tối ưu: Sử dụng dictionary
giúp truy xuất nhanh (O(1) mỗi lần cập nhật).
⏳ Độ phức tạp: O(n).
Tối ưu: Tách chữ và số trong 1 lần duyệt giúp tiết kiệm thời gian.
⏳ Độ phức tạp: O(n log n) do sắp xếp số.
Tối ưu: Sử dụng dx, dy để kiểm tra 8 hướng nhanh chóng.
⏳ Độ phức tạp: O(m × n).
import math 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ệ # Đọc input n = int(input()) canh = list(map(int, input().split())) # Xuất kết quả print(f"{tam_giac_lon_nhat(n, canh):.2f}")
⏳ Độ phức tạp: O(n²).
import sys sys.stdin = open("GOOD.INP", "r") sys.stdout = open("GOOD.OUT", "w") # Doc so kien hang n va tai trong m n, m = map(int, sys.stdin.readline().split()) # Doc danh sach trong luong cac kien hang 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 = [] # Danh sach cac kien hang duoc chon tong_trong_luong = 0 # Tong trong luong cac kien hang duoc chon # 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)
Tối ưu: Dùng sắp xếp + duyệt tuyến tính, tránh thử mọi khả năng (O(2ⁿ)).
⏳ Độ phức tạp: O(n log n).
Bài toán | Tối ưu chính | Độ phức tạp |
---|---|---|
SAME | Hash map (dictionary) | O(n) |
STRING | Duyệt + sắp xếp | O(n log n) |
LUCKY | Duyệt + kiểm tra nhanh | O(m × n) |
TRIANGLE | Sắp xếp + hai con trỏ | O(n²) |
GOOD | Sắp xếp + duyệt tuyến tính | O(n log n) |
Nhận xét:
Tất cả bài đều chạy tốt với dữ liệu lớn, trừ bài tam giác có thể cần cải tiến hơn nữa.
Khóa học Python online từ cơ bản đến nâng cao
2 Đề thi học sinh giỏi Tin học THCS cấp tỉnh Tiền Giang có đáp án SỞ…
Phần 1: Các bài tập dễ và cơ bản làm được các bài này các…
100 triệu là mức lương của lập trình Python vì sao? 1. Vì sao Python…
Bài 71: Đổi tất cả ký tự trong một chuỗi thành ký tự thường bằng…
Bài 26 - Tính Tổng Những Số Chia Hết Cho 3 và 5 bằng Python…
Bài 15: Cộng, Trừ, Căn Bậc Hai bằng Python mới nhất 2025 - 2026 Python…
This website uses cookies.