Các tài liệu này được thiết kế theo dạng chuyên đề lý thuyết và hệ thống bài tập tham khảo, luyện tập được đưa ra theo nhiều mức độ cho chuyên đề đó bao quát toàn bộ cho 3 khối và nhiều
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐỒNG NAI
Đơn vị: Trường Thpt Chuyên Lương Thế Vinh
Mã số: (Do HĐKH Sở GD&ĐT ghi)
SÁNG KIẾN KINH NGHIỆM PHÂN LOẠI BÀI TẬP THEO CHUYÊN ĐỀ TIN 10
Người thực hiện: NGUYỄN HOÀNG ANH
Lĩnh vực nghiên cứu:
- Quản lý giáo dục
- Phương pháp dạy học bộ môn: TIN HỌC
(Ghi rõ tên bộ môn)
- Lĩnh vực khác:
(Ghi rõ tên lĩnh vực)
Có đính kèm: Các sản phẩm không thể hiện trong bản in SKKN
Mô hình Đĩa CD (DVD) Phim ảnh Hiện vật khác
(các phim, ảnh, sản phẩm phần mềm)
Năm học: 2014-2015
BM 01-Bìa SKKN
Trang 2SƠ LƯỢC LÝ LỊCH KHOA HỌC
––––––––––––––––––
I THÔNG TIN CHUNG VỀ CÁ NHÂN
1 Họ và tên: NGUYỄN HOÀNG ANH
2 Ngày tháng năm sinh: 08-09-1987
9 Đơn vị công tác: TRƯỜNG THPT CHUYÊN LƯƠNG THẾ VINH
II TRÌNH ĐỘ ĐÀO TẠO
- Học vị (hoặc trình độ chuyên môn, nghiệp vụ) cao nhất: CỬ NHÂN
- Năm nhận bằng: 2010
- Chuyên ngành đào tạo: SƯ PHẠM TIN HỌC
III KINH NGHIỆM KHOA HỌC
- Lĩnh vực chuyên môn có kinh nghiệm: TIN HỌC
Số năm có kinh nghiệm: 05
- Các sáng kiến kinh nghiệm đã có trong 5 năm gần đây: 02
o Thuật toán hàm Z
o Thuật toán hàm Z trong ứng dụng xử lý các bài toán về xâu ký tự
BM02-LLKHSKKN
Trang 3hợp với từng đối tượng học sinh
II CƠ SỞ LÝ LUẬN VÀ THỰC TIỄN
a) Trong chương trình giảng dạy chuyên Tin, hiện đang sử dụng bộ tài liệu giáo khoa chuyên Tin (gồm 3 quyển) và một số tài liệu chuyên đề Các tài liệu này được thiết
kế theo dạng chuyên đề lý thuyết và hệ thống bài tập tham khảo, luyện tập được đưa ra theo nhiều mức độ cho chuyên đề đó bao quát toàn bộ cho 3 khối và nhiều trình độ học sinh Song song với hệ thống bài tập đã phân loại còn có nhiều hệ thống bài tập trực tuyến bao gồm cả phân loại theo chuyên đề cụ thể và không phân loại theo chuyên đề cụ thể Khi giảng dạy, giáo viên sẽ dựa vào để chọn lọc ra cho học sinh các bài tập phù hợp
b) Trong thực tế giảng dạy cho thấy: hệ thống bài tập đã có trong các bộ SGK có thể giúp các em phát triển khả năng tư duy và rèn luyện theo chuyên đề tương đối khá đầy đủ Tuy nhiên, có một số bài khá khó và việc giải các bài này đòi hỏi học sinh phải được tiếp cận một số kỹ thuật lập trình mà chỉ có sau một thời gian tích lũy mới có thể làm được Nếu các em không được giao bài tập phù hợp thì có thể dẫn đến sự chán nản và ảnh hưởng rất lớn đến kết quả học tập Từ đó nhu cầu cần có một hệ thống các bài tập phù hợp với đối tượng học sinh lớp 10 theo từng chuyên đề là cần thiết nên tôi chọn thực hiện đề tài này với mục đích nâng cao hơn nữa hiệu quả trong công tác giảng dạy và bồi dưỡng học sinh giỏi ngay từ khối 10, tạo nền tảng vững chắc cho các em nâng cao hơn nữa kỹ năng và năng lực của mình một cách hoàn thiện
Trong thời gian thực hiện đề tài, tôi đã tham khảo ý kiến của các giáo viên nhiều kinh nghiệm và có tham gia giảng dạy để có thể đưa ra được một hệ thống bài tập
cơ bản thuộc về các chuyên đề mà tôi phụ trách phù hợp với trình độ và đối tượng học sinh của lớp 10 Tin
Hệ thống bài tập được xem là một giải pháp mang tính tham khảo, có thể được tùy chỉnh, thêm, bớt tùy vào nhu cầu giảng dạy và trình độ học sinh cụ thể Nó được tổng hợp từ các nguồn bài tập sẵn có (sắp xếp, phân loại lại) và một số bài tập phát triển Song song đó, quá trình dạy học còn áp dụng một số biện pháp tích cực, chủ động giúp học sinh nắm chắc hơn kiến thức và phát triển khả năng diễn đạt thuật toán một cách trôi chảy
BM03-TMSKKN
Trang 42
III TỔ CHỨC THỰC HIỆN CÁC GIẢI PHÁP
1 Giải pháp 1:Phân loại hệ thống bài tập theo từng chuyên đề
a) Trong quá trình giảng dạy từ chuyên đề mở đầu (cơ bản), giáo viên tiến hành phân loại bài tập và hướng dẫn học sinh luyện tập theo hệ thống từ dễ đến khó, từ cơ bản đến những bài tập có tính kết hợp và suy luận
b) Hệ thống phân loại bài tập dành cho học sinh lớp 10 chuyên Tin:
Dưới đây là hệ thống bài tập đã được phân loại trong các chuyên đề mà tôi phụ trách ở lớp 10 chuyên Tin năm học 2014-2015
Phần 1: Kỹ thuật lập trình
- Phần cơ bản, làm quen với ngôn ngữ lập trình: Sử dụng hệ thống bài tập trong bộ
tài liệu “Tài liệu giảng dạy lập trình khối THPT” quyển 1 đã được phân loại cụ thể
và hợp lý, phù hợp với trình độ học sinh vừa tiếp cận với bộ môn lập trình Pascal
2, 2), (-2, 3) Như vậy, giá nhỏ nhất của một lượt chơi trong số các lượt chơi
có thể là 0 tương ứng với giá của lượt chơi (-2, 2)
Yêu cầu
- Hãy xác định giá nhỏ nhất của một lượt chơi trong số các lượt chơi có thể Input
Dòng đầu tiên chứa số nguyên dương n (n ≤ 105)
Dòng thứ hai chứa dãy số nguyên b1, b2, , bn (|bi| ≤ 109, i=1, 2, , n)
Dòng thứ hai chứa dãy số nguyên c1, c2, , cn (|ci| ≤ 109, i=1, 2, , n)
Hai số liên tiếp trên một dòng được ghi cách nhau bởi dấu cách
Output
- Ghi ra một dòng duy nhất giá nhỏ nhất tìm được
Trang 5Yêu cầu: Hãy cho biết đoàn du lịch có thể qua cầu hết hay không?
Input:
- Dòng đầu là số nguyên dương N, K (2<=N<=105, (|K| <= 109) Trong đó N
là số lượng du khách K là tải trọng tối đa của cầu
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 102) các số cách nhau một dấu khoảng trắng là trọng lượng của mỗi du khách
Yêu cầu: Hãy cho biết đoàn du lịch có thể qua cầu hết hay không? Nếu không, cho biết số du khách phải đi đường khác qua sông?
Trang 64
Input:
- Dòng đầu là số nguyên dương N, K (2<=N<=105, (|K| <= 109 ) Trong đó N
là số lượng du khách K là tải trọng tối đa của cầu
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 102) các số cách nhau một dấu khoảng trắng là trọng lượng của mỗi du khách
Output:
- Xuất ra ‘Yes’ nếu đoàn du lịch có thể đi qua hết, ‘No’ trong trường hợp ngược lại Trong trường hợp ‘No’, dòng thứ 2 là số du khách phải đi đường vòng qua sông
Cho dãy số nguyên N phần tử A1, A2,…, Anvà số nguyên K Hãy cho biết vị
trí xuất hiện đầu tiên của K trong dãy đã cho
Input:
- Dòng đầu là số nguyên dương N, K (2<=N<=105, (|K| <= 109 )
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 109) các số cách nhau một dấu khoảng trắng
Cho dãy số nguyên N phần tử A1, A2,…, Anvà số nguyên K Hãy cho biết vị
trí xuất hiện cuối cùng của K trong dãy đã cho
Input:
- Dòng đầu là số nguyên dương N, K (2<=N<=105, (|K| <= 109 )
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 109) các số cách nhau một dấu khoảng trắng
Output:
- Xuất ra một số duy nhất là vị trí cuối cùng xuất hiện của K
Ví dụ:
Trang 7- Dòng đầu là số nguyên dương N, K (2<=N<=105, (|K| <= 109 )
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 109) các số cách nhau một dấu khoảng trắng
Giải thích:…
8 STRSUB
Cho xâu S (độ dài không quá 200 ký tự) chỉ bao gồm các ký tự a…z Đếm
số lượng xâu con liên tiếp khác nhau nhận được từ xâu S
xâu con liên tiếp là 7
Trang 8- Dòng đầu là số nguyên dương N (2<=N<=105)
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 109) các số cách nhau một dấu khoảng trắng
Ví dụ: cho 3 số 123 589 478 ta có thể tạo được số: 123589478 Yêu cầu: Tìm chữ số lớn nhất có thể tạo được từ các số trên
Input:
- Dòng đầu là số nguyên dương N (2<=N<=105)
- Dòng tiếp theo chứa N số nguyên Ai (|Ai| <= 109) các số cách nhau một dấu khoảng trắng
Trang 9- T dòng tiếp theo, mỗi dòng chứa một số i (4 ) duy nhất là Fi cần tính
Output: gồm T dòng, mỗi dòng ghi giá trị Fi
Giới hạn thời gian: 1s
Năm ngoái Conan chỉ mới bước vào học Tin học thật sự Thế nhưng anh ta bị đàn em
là Như Quỳnh thách đố bài toán sau:
Cho T ≤ 100000 Mỗi dòng của T có 1 số N (N ≤ 100000) Dãy số A được xây dựng như sau:
A[0] = 0
A[1] = 1
A[2i] = A[i]
A[2i+1] = A[i] + A[i+1]
Nhiệm vụ của bạn là tìm số lớn nhất của dãy
Có T dòng tương ứng với giá trị lớn nhất của các đoạn
3 Leo cầu thang-LTVSTEPS
Bờm chơi trò chơi điện tử Lucky Luke đến màn phải điều khiển Lucky leo lên một cầu thang gồm n bậc
Các bậc thang được đánh số từ 1 đến n từ dưới lên trên Lucky có thể đi lên một bậc thang, hoặc nhảy một bước lên hai bậc thang
Biết ban đầu, Lucky đứng ở sàn nhà
Chơi đến đây, Bờm chợt nảy ra câu hỏi: có bao nhiêu cách để Lucky leo hết được cầu thang? (nghĩa là leo đến bậc thang thứ n) Bờm muốn nhờ bạn trả lời câu hỏi này
Trang 104 Leo cầu thang-LTVSTEPS2
Bờm chơi trò chơi điện tử Lucky Luke đến màn phải điều khiển Lucky leo lên một cầu thang gồm n bậc
Các bậc thang được đánh số từ 1 đến n từ dưới lên trên Lucky có thể đi lên một bậc thang, hoặc nhảy một bước lên hai bậc thang Tuy nhiên ở level này, một số bậc cầu thang có thể bị hỏng nên Lucky không thể nhảy đến bậc đó
Biết ban đầu, Lucky đứng ở sàn nhà
Chơi đến đây, Bờm chợt nảy ra câu hỏi: có bao nhiêu cách để Lucky leo hết được cầu thang? (nghĩa là leo đến bậc thang thứ n) Bờm muốn nhờ bạn trả lời câu hỏi này
Trang 119
In ra số cách Lucky leo hết cầu thang mod K
Ví dụ
5 DÃY 2-SUM – TWOSUM – SPOJ
Một dãy các số nguyên không âm A[1 N] được gọi là 2-Sum nếu ta có thể tách dãy đó làm 2 dãy có tổng các giá trị bằng nhau Nghĩa là tồn tại một số k trong đoạn [1 N-1] sao cho tổng A[1] + A[2] + … + A[k] = A[k+1] + A[k+2] + … + A[N]
Cho 1 dãy gồm N số nguyên không âm Hãy tìm dãy con gồm các phần tử liên tiếp dài nhất mà cũng là dãy 2-Sum
Input
Dòng đầu tiên chứa số nguyên N (2 <= N <= 5000)
N dòng tiếp theo, dòng thứ i chứa giá trị của phần tử A[i] của dãy (0 <= A[i] <= 200000) Output
Xuất ra độ dài lớn nhất của dãy 2-Sum tìm được Nếu không có kết quả thì in ra 0
Trang 1210
6 BUS – NKBUS – SPOJ
Một xe buýt của công ty có nhiệm vụ đón nhân viên đến trụ sở làm việc Trên hành trình,
xe buýt sẽ tiếp nhận nhân viên đứng chờ ở các điểm hẹn nếu như xe còn chỗ trống Xe buýt có thể đỗ lại để chờ những công nhân chưa kịp đến điểm hẹn
Cho biết thời điểm mà mỗi nhân viên đến điểm hẹn của mình và thời điểm qua mỗi điểm hẹn của xe buýt Giả thiết rằng xe buýt đến điểm hẹn đầu tiên tại thời điểm 0 và thời gian xếp khách lên xe được bằng 0
Xe buýt cần phải chở một số lượng nhiều nhất các nhân viên có thể được đến trụ sở Hãy xác định khoảng thời gian ngắn nhất để xe buýt thực hiện công việc
là các thời điểm đến điểm hẹn của k nhân viên
Kết qủa
Gồm một dòng duy nhất, là thời gian ngắn nhất tìm được
Giới hạn
1 ≤ n ≤ 200000, 1 ≤ m ≤ 20000
Tổng số nhân viên không vượt quá 200000
Kết quả không vượt quá 231-1
Trang 1311
Giải thích: Trên đường đến công ty có 3 trạm xe buýt Từ trạm 1 đến trạm 2, trạm 2 đến trạm 3, và từ trạm 3 đến công ty lần lượt mất 3, 1 và 5 đơn vị thời gian Xe buýt có thể đi như sau: đến thẳng trạm 2, đón người thứ 2, đến trạm 3, chờ 1 đơn vị thời gian để đón người duy nhất ở trạm này, và cuối cùng đến công ty Tổng cộng xe buýt đi mất 3 + 1 + 1 + 5 = 10 đơn vị thời gian
7 LATGACH3 – M3TILE – SPOJ
Đếm số cách lát hình chữ nhật 3*n bằng các domino 2*1, dữ liệu vào gồm nhiều test, kết thúc là -1, xuất ra tương ứng các test (0 <= n <= 30)
Trang 1412
Yêu cầu: Xác định xem những người nào cần rời khỏi hàng và nhờ người đứng trước mua hộ vé để tổng thời gian phục vụ bán vé là nhỏ nhất
Dữ liệu
Dòng đầu tiên chứa số N (1 ≤ N ≤ 60000)
Dòng thứ 2 ghi N số nguyên dương t1, t2, , tN (1 ≤ ti ≤ 30000) Dòng thứ ba ghi N-1 số nguyên dương r1, r2, , rN-1 (1 ≤ ri ≤ 30000)
khoảng cách giữa hai máy liên tiếp Bạn hãy giúp các học sinh này tìm cách nối mạng thoả mãn yêu cầu đặt ra sao cho tổng độ dài cáp nối phải sử dụng là ít nhất
Dữ liệu
Dòng đầu tiên chứa số lượng máy N (1 ≤ N ≤ 25000)
Dòng thứ i trong số N-1 dòng tiếp theo chứa các khoảng cách từ máy i đến máy i+1 (i=1,2, ,N-1) Giả thiết rằng khoảng cách từ máy 1 đến máy N không vượt quá 106
Trang 1513
Các học sinh khi đến thực tập trong phòng máy tính thường hay chơi trò chơi điện tử trên mạng Để ngăn ngừa, người trực phòng máy đã ngắt tất cả các máy tính ra khỏi mạng và xếp chúng thành một dãy trên một cái bàn dài và gắn chặt máy xuống mặt bàn rồi đánh số thứ tự các máy từ 1 đến N theo chiều từ trái sang phải Các học sinh tinh nghịch không chịu thua, họ đã quyết định tìm cách nối các máy trên bàn bởi các đoạn dây nối sao cho mỗi máy được nối với ít nhất một máy khác Để tiến hành công việc này, họ đã đo
khoảng cách giữa hai máy liên tiếp Bạn hãy giúp các học sinh này tìm cách nối mạng thoả mãn yêu cầu đặt ra sao cho tổng độ dài cáp nối phải sử dụng là ít nhất Và ứng với phương án đó, các học sinh phải lên sơ đồ các máy cần nối với nhau
Dữ liệu
Dòng đầu tiên chứa số lượng máy N (1 ≤ N ≤ 25000)
Dòng thứ i trong số N-1 dòng tiếp theo chứa các khoảng cách từ máy i đến máy i+1 (i=1,2, ,N-1) Giả thiết rằng khoảng cách từ máy 1 đến máy N không vượt quá 106
Kết quả
Ghi ra độ dài của cáp nối cần sử dụng
Một số dòng phía sau, mỗi dòng ghi số thứ tự của các máy được nối với nhau
Ví dụ
11 Lát gạch-LATGACH
Cho một hình chữ nhật kích thước 2xN (1<=N<=100) Hãy đếm số cách lát các viên gạch nhỏ kích thước 1x2 và 2x1 vào hình trên sao cho không có phần nào của các viên gạch nhỏ thừa ra ngoài, cũng không có vùng diện tích nào của hình chữ nhật không được lát
12 0 0 Pairs – M00PAIR – SPOJ
NKCABLE.INP NKCABLE OUT
Trang 1613 KHỐI LẬP PHƯƠNG LỚN NHẤT – MAXCUB – SPOJ
Cho một khối lập phương kích thước n chia làm n3 khối lập phương đơn vị Mỗi khối lập phương đơn vị chứa 1 số nguyên Bạn hãy tìm một khối lập phương con của khối lập phương đã cho sao cho tổng các số trong khối lập phương đó là lớn nhất
Input
- Dòng đầu: số lượng test
– Tiếp theo là các test, mỗi test gồm: dòng đầu là n Sau đó n nhóm dòng thể hiện lớp cắt
Trang 1816
Dữ liệu vào :
Dòng đầu tiên chứa số T là số test
T dòng tiếp theo mỗi dòng chứa 2 số N và K, với 1<=K<=N<=25
Trang 1917
3
13
16 Bulls and Cows- CTNBULLS
Nông dân john muốn sắp xếp n con bò(bao gồm cả bò đực và bò cái) của ông ta trên 1 hàng Ông ta biết rằng những con bò đực rất hung hăng – Nếu 2 con bò đực đứng quá gần nhau thì chúng sẽ trở nên hung dữ và bắt đầu húc nhau , vì thế chúng sẽ phá hòng mất trật
tự trên hàng mà ông ta vừa sắp xếp được
Theo kinh nghiệm lâu năm của mình , john biết được nếu ở giữa hai con bò đực có ít nhất
K con bò cái thì sẽ ngăn chặn được việc chúng húc nhau (+_+)
Vì thế , ông ta nhờ các Vcoders giúp đỡ để tính toán xem có bao nhiêu cách sắp xếp đàn
bò của ông ta lại sao cho không có “chiến tranh” xảy ra giữa những chú bò (^_^), (Tất cả những con bò đực và những con bò cái đều giống nhau) Hai dãy ( B1 Bn ) và (A1 An ) được cho là khác nhau nếu tồn tại một vị trí I (1<=i<=n) sao cho Ai <> Bi
1<=N<=100000 0<=k<=n
Input : gồm 1 dòng duy nhất chứa 2 số n và k cách nhau 1 dấu cách
Output: gồm duy nhất một số là kết quả theo modun 2111992
Trang 2018
BCCB
Có 1/3 số test với n<=15
17 Dãy có tổng bằng S- NTSEQS
Cho N số nguyên dương tạo thành dãy A={A1, A2, , AN} Tìm ra một dãy con của dãy
A (không nhất thiết là các phần tử liên tiếp trong dãy) có tổng bằng S cho trước
Input:
Dòng đầu tiên ghi hai số nguyên dương N và S (0<N≤200) và S (0<S≤40000)
Các dòng tiếp theo lần lượt ghi N số hạng của dãy A là các số A1, A2, ,
AN (0<Ai≤200)
Output:
Nếu bài toán vô nghiệm thì ghi duy nhất số 0
Nếu bài toán có nghiệm thì:
o Dòng thứ nhất ghi số 1
o Dòng thứ hai ghi dãy N số 0 hoặc 1 với ý nghĩa số thứ i bằng 1 nếu như nó được chọn và bằng 0 trong trường hợp ngược lại
Các số ghi cách nhau một dấu cách
Nếu có nhiều phương án thì chỉ cần ghi ra một phương án bất kỳ