2 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:
|
| ||||||||
| |||||||||
| |||||||||
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
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.
|
Học sinh chỉ được chọn một trong các môi trường quy định ở trên lập trình để làm toàn bộ bài thi.
Giá bán lẻ điện sinh hoạt được tính theo 3 bậc gồm:
Yêu cầu: Tính tổng tiền điện phải trả của một khu phố gồm n hộ gia đình.
Dữ liệu vào: Đọc từ file văn bản ELCOST.INP gồm hai dòng:
Kết quả: Ghi ra file văn bản ELCOST.OUT một số nguyên dương là tổng tiền điện của n hộ gia đình.
Ví dụ:
| ELCOST.INP | ELCOST.OUT |
| 3 15 165 205 | 1050000 |
Giải thích:
Có 3 hộ gia đình sử dụng số Kwh lần lượt là: 15, 165 và 205
Số tiền hộ thứ nhất: 15*2500 = 37500
Số tiền hộ thứ hai: 100*2500 + 65*3000 = 445000
Số tiền hộ thứ ba: 100*2500 + 100*3000 + 5*3500 = 567500
Nên tổng số tiền là: 37500 + 445000 + 567500 = 1050000
Cho xâu s chỉ gồm các kí tự in thường trong bảng chữ cái Tiếng Anh và kí tự số từ ‘0’ đến ‘9’.
Yêu cầu: Tìm độ mạnh của xâu. Biết rằng độ mạnh của xâu là tích của số kí tự phân biệt xuất hiện trong xâu với số lần xuất hiện nhiều nhất của một kí tự trong xâu.
Dữ liệu vào: Đọc từ file văn bản STRONG.INP gồm một dòng chứa xâu s có chiều dài không quá 103 kí tự. Trong xâu không chứa khoảng trắng và kí tự đặc biệt.
Kết quả: ghi ra file văn bản STRONG.OUT một số nguyên dương là độ mạnh của xâu.
Ví dụ:
| STRONG.INP | STRONG.OUT |
| xy11z2yyzxy0y | 30 |
| ggggg__________________ | 5 |
Giải thích:
Ở test 1: Xâu s = ‘xy11z2yyzxy0y’. Số kí tự phân biệt trong xâu s là 6 (gồm ‘x’, ‘y’, ‘1’, ‘z’, ‘2’, ‘0’) và số lần xuất hiện nhiều nhất của một kí tự là 5 (kí tự ‘y’). Nên độ mạnh của xâu là 6 * 5 = 30.
Ở test 2: Xâu s = ‘ggggg’. Số kí tự phân biệt trong xâu s là 1 (kí tự ‘g’) và số lần xuất hiện nhiều nhất là 5. Nên độ mạnh của xâu là 1 * 5 = 5.
Cho ma trận a gồm m dòng và n cột. Ma trận b được tạo bằng cách: bij = (tổng dòng i trên ma trận a + tổng cột j trên ma trận a) – aij Yêu cầu: Tìm giá trị nhỏ nhất trong ma trận b.
Dữ liệu vào: Đọc từ file văn bản SUM.INP gồm nhiều dòng:
Kết quả: Ghi ra file văn bản SUM.OUT một số nguyên dương là giá trị nhỏ nhất tìm được trong ma trận b.
Ví dụ:
| SUM.INP | SUM.OUT |
| 2 3 | 10 |
| 3 2 4 | |
| 2 1 5 |
Giải thích: Ma trận b là 11 10 14 11 10 12
Nên giá trị nhỏ nhất trong ma trận b là 10.
Xâu lặp là một xâu có đoạn đầu ngắn nhất của nó được lặp lại nhiều lần. Ví dụ ‘xyxyxyxy’ là một xâu lặp vì nó có đoạn đầu ngắn nhất là ‘xy’ được lặp lại nhiều lần. ‘xyxy’ cũng được lặp lại nhưng không được tính là đoạn đầu vì nó không ngắn nhất.
Yêu cầu: Cho n xâu. Hãy ghép đoạn đầu của mỗi xâu lặp theo thứ tự xuất hiện của xâu (nếu xâu đó là xâu lặp).
Dữ liệu vào: Đọc từ file văn bản SUBSTR.INP gồm nhiều dòng:
Lưu ý: Trong xâu chỉ chứa kí tự thường từ ‘a’ đến ‘z’ trong bảng chữ cái Tiếng Anh (không chứa khoảng trắng, kí tự số và các kí tự đặc biệt). Dữ liệu vào đảm bảo luôn có xâu lặp.
Kết quả: Ghi ra file văn bản SUBSTR.OUT là xâu ghép thu được.
Ví dụ:
| SUBSTR.INP | SUBSTR.OUT |
| 4 | xyabach |
| xyxyxyxy | |
| abcab | |
| abacabac | |
| hhh |
Giải thích:
Trong 4 xâu, có 3 xâu lặp theo thứ tự là: ‘xyxyxyxy’, ‘abacabac’, ‘hhh’. Ba đoạn đầu tương ứng là ‘xy’, ‘abac’, ‘h’. Nên xâu ghép là: ‘xyabach’.
An được mẹ cho một số phần thưởng. Có nhiều phần thưởng được xếp thành một hàng, mỗi phần thưởng có giá trị trong khoảng từ 1 đến 109. An muốn chọn những phần thưởng có giá trị tăng dần liên tiếp nhiều nhất.
Yêu cầu: Cho biết số lượng phần thưởng mà An chọn được như mong muốn.
Dữ liệu vào: Đọc từ file văn bản GIFT.INP gồm một dòng chứa các số nguyên dương là giá trị của các phần thưởng. Giữa hai số liên tiếp nhau cách nhau bởi một dấu cách.
Kết quả: Ghi ra file văn bản GIFT.OUT một số nguyên dương là số lượng phần thưởng An chọn được.
Ví dụ:
| GIFT.INP | GIFT.OUT |
| 2 4 3 5 7 8 6 | 4 |
| 1 5 4 3 5 6 6 5 8 6 | 3 |
Giải thích:
Ở test 1: Độ dài phần thưởng liên tiếp tăng dần nhiều nhất là 4 (2 4 3 5 7 8 6)
Ở test 2: Độ dài phần thưởng liên tiếp tăng dần nhiều nhất là 3 (1 5 4 3 5 6 6 58 6) ……. -…………… ……………….. HET……… –
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:
⏳ Độ phức tạp: O(n).
import sys
from collections import Counter
sys.stdin = open("STRONG.INP", "r")
sys.stdout = open("STRONG.OUT", "w")
s = input().strip()
tan_suat = Counter(s)
so_ky_tu_phan_biet = len(tan_suat)
tan_suat_max = max(tan_suat.values())
print(so_ky_tu_phan_biet * tan_suat_max)
import sys
sys.stdin = open("SUM.INP", "r")
sys.stdout = open("SUM.OUT", "w")
m, n = map(int, input().split())
ma_tran = [list(map(int, input().split())) for _ in range(m)]
tong_dong = [sum(hang) for hang in ma_tran]
tong_cot = [sum(ma_tran[i][j] for i in range(m)) for j in range(n)]
gia_tri_nho_nhat = float('inf')
for i in range(m):
for j in range(n):
b_ij = tong_dong[i] + tong_cot[j] - ma_tran[i][j]
gia_tri_nho_nhat = min(gia_tri_nho_nhat, b_ij)
print(gia_tri_nho_nhat)
import sys
sys.stdin = open("SUBSTR.INP", "r")
sys.stdout = open("SUBSTR.OUT", "w")
def tim_doan_dau(xau):
n = len(xau)
for do_dai in range(1, n + 1):
if n % do_dai == 0 and xau == xau[:do_dai] * (n // do_dai):
return xau[:do_dai]
return xau
n = int(input().strip())
ket_qua = []
for _ in range(n):
xau = input().strip()
ket_qua.append(tim_doan_dau(xau))
print("".join(ket_qua))
import sys
sys.stdin = open("GIFT.INP", "r")
sys.stdout = open("GIFT.OUT", "w")
phan_thuong = list(map(int, input().split()))
max_do_dai = 1
do_dai_hien_tai = 1
for i in range(1, len(phan_thuong)):
if phan_thuong[i] > phan_thuong[i - 1]:
do_dai_hien_tai += 1
else:
max_do_dai = max(max_do_dai, do_dai_hien_tai)
do_dai_hien_tai = 1
print(max(max_do_dai, do_dai_hien_tai))
| Bài toán | Tối ưu chính | Độ phức tạp |
|---|---|---|
| ELCOST | Duyệt danh sách tính tiền nhanh | O(n) |
| STRONG | Hash map để đếm tần suất | O(n) |
| SUM | Tiền xử lý tổng hàng/cột | O(m × n) |
| SUBSTR | Kiểm tra xâu lặp nhanh | O(n²) (trường hợp xấu nhất) |
| GIFT | Duyệt 1 lần để tìm dãy tăng dài nhất | O(n) |
Tất cả các bài toán đều chạy tối ưu và có thể xử lý nhanh dữ liệu lớn!
Khóa học Python online từ cơ bản đến nâng cao
⚠️ Nỗi Đau Người Dùng: Laptop Acer Hư Giữa Chừng – Cảm Giác Bất Lực!…
Bạn đang làm việc, học tập hay xem phim, bỗng Laptop HP tự tắt cái…
Bạn đang sử dụng laptop Acer bình thường, bỗng một ngày màn hình đen thui,…
✅ Kiểm tra kỹ – Báo đúng bệnh – Không lo bị chém giá BÁC…
Laptop Toshiba nổi tiếng với độ bền, hiệu năng ổn định và giá thành hợp…
Tin vui đặc biệt cho người dùng Dell Vostro! Bạn đang dùng laptop Dell Vostro…
This website uses cookies.
View Comments
Hi, I think your site might be having browser compatibility issues. When I look at your website in Safari, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, fantastic blog!