Tải bản đầy đủ (.docx) (33 trang)

skkn PHÂN LOẠI bài tập THEO CHUYÊN đề TIN 10

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (386.73 KB, 33 trang )

BM 01-Bìa SKKN

SỞ 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


BM02-LLKHSKKN

SƠ 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

3.

Nam, nữ: NAM

4.

Địa chỉ: 10/8, TỔ 1, KP1, PHƯỜNG BỬU LONG, BIÊN HÒA, ĐỒNG NAI

5.

Điện thoại: 0945 648 411


6.

Fax:

7.

Chức vụ: GIÁO VIÊN

E-mail:

8.

Nhiệm vụ được giao: GIẢNG DẠY BỘ MÔN TIN HỌC THPT, PHỤ
TRÁCH MỘT SỐ CHUYÊN ĐỀ CHUYÊN TIN 10, CHỦ NHIỆM LỚP 10
TIN

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ự.


BM03-TMSKKN

Tên SKKN: PHÂN LOẠI BÀI TẬP THEO CHUYÊN ĐỀ TIN 10
I.

LÝ DO CHỌN ĐỀ TÀI
- Nhu cầu có một khung bài tập hiệu quả, định hướng giảng dạy cho lớp
chuyên Tin 10 sao cho có thể đáp ứng được yêu cầu của các kỳ thi tuyển
chọn học sinh giỏi được đặt ra và cần được định hình một cách cụ thể, phù

hợ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.

3


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.
Phần 2: Sắp xếp, tìm kiếm:

- Hệ thống bài tập trong phần “Sắp xếp, tìm kiếm” thuộc “Tài liệu giảng dạy lập
-

trình khối THPT” quyển 2 .

Một số bài tập phát triển dùng để tham khảo:
1. NKSGAME
Hai bạn học sinh trong lúc nhàn rỗi nghĩ ra trò chơi sau đây. Mỗi bạn chọn
trước một dãy số gồm n số nguyên. Giả sử dãy số mà bạn thứ nhất chọn là:
b1, b2,..., bn , còn dãy số mà bạn thứ hai chọn là c 1, c2, ..., cn. Mỗi lượt chơi
mỗi bạn đưa ra một số hạng trong dãy số của mình. Nếu bạn thứ nhất đưa ra
số hạng bi (1 ≤ i ≤ n), còn bạn thứ hai đưa ra số hạng cj (1 ≤ j ≤ n) thì giá
của lượt chơi đó sẽ là |bi+cj|.
Ví dụ: Giả sử dãy số bạn thứ nhất chọn là 1, -2; còn dãy số mà bạn thứ hai
chọn là 2, 3. Khi đó các khả năng có thể của một lượt chơi là (1, 2), (1, 3), (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


4


-

Ghi ra một dòng duy nhất giá nhỏ nhất tìm được.
NKSGAME.IN
P
2
1 -2
23

NKSGAME.OU
T
0

Ràng buộc


60% số tests ứng với 60% số điểm của bài có 1 ≤ n ≤ 1000.

2. LTVTour1

-

Các thành viên trong một đoàn du lịch được giới thiệu đến một địa điểm khá
thú vị. Đoạn đường mà họ sắp đi qua có một cây cầu được đặt tên là cây cầu
Đoàn kết. Các du khách đi đến đây chỉ được đi qua cầu nếu họ tìm được một
người trong đoàn chịu cõng mình qua bên kia. Vì yêu cầu tải trọng của cầu

chỉ có thể chịu được sức nặng K nên họ phải tìm được người phù hợp với
mình. Các cặp sau khi lựa chọn xong thì lần lượt qua cầu và không được
quay lại đón thêm ai cả (tại một thời điểm chỉ có hai người đang cõng nhau
qua cầu).
Yê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.
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.
Ví dụ:
LTVTour1.INP
LTVTour1.OU
T
5 120
No
30 43 53 96 70
6 120
Yes
30 43 53 86 70 50
6 120
No
30 43 53 100 70
50

3. LTVTour2
Các thành viên trong một đoàn du lịch được giới thiệu đến một địa điểm khá

thú vị. Đoạn đường mà họ sắp đi qua có một cây cầu được đặt tên là cây cầu
Đoàn kết. Các du khách đi đến đây chỉ được đi qua cầu nếu họ tìm được một
người trong đoàn chịu cõng mình qua bên kia. Vì yêu cầu tải trọng của cầu
chỉ có thể chịu được sức nặng K nên họ phải tìm được người phù hợp với
mình. Các cặp sau khi lựa chọn xong thì lần lượt qua cầu và không được

5


-

quay lại đón thêm ai cả (tại một thời điểm chỉ có hai người đang cõng nhau
qua cầu).
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?
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.
Ví dụ:
LTVTour2.INP
LTVTour1.OU
T
5 120
No

30 43 53 96 70
1
6 120
Yes
30 43 53 86 70 50
6 120
No
30 43 53 100 70
2
50

4. LTVSearch1

-

Cho dãy số nguyên N phần tử A1, A2,…, An và 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.
Output:
Xuất ra một số duy nhất là vị trí đầu tiên xuất hiện của K.
Ví dụ:
LTVSearch1.IN
P
30
101
52
12125


LTVSearch1.OU
T
2
2

Giải thích:

5. LTVSearch2
Cho dãy số nguyên N phần tử A1, A2,…, An và 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.

6


-

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ụ:
LTVSearch2.IN
LTVSearch2.OU
P
T
30
2

101
52
4
12125

6. LTVSearch3

-

-

Cho dãy số nguyên N phần tử A1, A2,… An và số nguyên K. Đếm số cặp i,j
(1 <= iInput:
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à số cặp tìm được.
Ví dụ:
LTVSearch3.IN
LTVSearch3.OU
P
T
40
1
1001
53
6
1 2 1 2 -5

Giải thích:
Các cặp tìm được là : 1 2, 1 2, 2 1, 2 -5, 1 2, 2 -5

7. ChrCount

-

Cho xâu S (độ dài không quá 106 ký tự) chỉ bao gồm các ký tự a…z. Đếm số
lần xuất hiện của các ký tự khác nhau trong S và xuất ra ký tự có số lần xuất
hiện nhiều nhất. Nếu có nhiều ký tự cùng số lần xuất hiện thì xuất ra ký tự
đầu tiên theo thứ tự từ điển.
Input:
Một dòng duy nhất chứa xâu S.
Output:
Xuất ra một ký tự duy nhất là ký tự xuất hiện nhiều nhất .
Ví dụ:
ChrCount.IN
ChrCount.OU
P
T
ababa
a
Giải thích:…

7


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.
Input:
- Một dòng duy nhất chứa xâu S.
Output:
- Xuất ra một số duy nhất là số xâu con thỏa yêu cầu đề bài.
Ví dụ:
STRSUB.IN
STRSUB.OU
P
T
abab
7
Giải thích:
S=’abab’ ta có các xâu con liên tiếp là: a, b, ab, ba, aba, bab, abab  số
lượng
9. ESEQ
Cho dãy số nguyên N phần tử A1 , A2,… An. Tìm cặp số p,q sao thỏa:
A1 + A2 +… +Ap = Aq + Aq+1 +… +An với 1<= p < q <= 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.
Output:
- Xuất ra một số duy nhất là số cặp tìm được.
Ví dụ:
ESEQ.INP ESEQ.OUT
3
3
101
Giải thích:

- Các cặp tìm được là : 1 3, 1 2, 2 3
10. NUMJOIN
Cho N số nguyên dương A1, A2, …, An (1<=N<=100, |Ai| <= 109). Từ các số
này người ta tạo ra một số nguyên mới bằng cách ghép tất cả các số đã cho,
tức là viết liên tiếp các chữ số của các số với nhau.
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.
Output:
- Xuất ra một số duy nhất là số lớn nhất có thể ghép được.
Ví dụ:
NUMJOIN.IN
NUMJOIN.OU
P
T
3
589478123

8


123 589 478

9


Phần 3 Quy hoạch động:


- Hệ thống bài tập trong phần “Quy hoạch động” thuộc “Tài liệu giảng dạy lập
trình khối THPT” quyển 1 .
- Một số bài tập phát triển tham khảo
1. Tính số Fibonaxi thứ n-LTVF
Số Fibonaxi được xác định như sau:
F0 = 1; F1 = 1; Fi = Fi-1+Fi-2;
Dữ liệu:
Input:
Gồm hai dòng:
-Dòng thứ nhất chứa số T – số test (1T2000)
-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.
Ví dụ:
LTVF.IN LTVF.OU
P
T
5
2
2
5
4
3
3
8
5
13
6


2. HELP CONAN12-MAXARR1
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
MAXARR1.I MAXARR1.O
A[2i] = A[i]
NP
UT
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 A từ 2
3
1 với N.
5
4
Input
10
Dòng đầu tiên là số T.
T dòng sau, mỗi dòng là 1 số N.
Output
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.
10


Dữ liệu
Một dòng duy nhất gồm một số nguyên N là số bậc của cầu thang (0 ≤ N ≤ 100).



LTVSTEPS.I
NP
In ra số cách 4

Kết qủa

LTVSTEPS.O
UT
5

Lucky leo hết cầu thang.

4. 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.


Dữ liệu


Dòng đầu tiên: gồm 2 số nguyên n và k, là số bậc của cầu thang và số bậc thang bị
hỏng (0 ≤ k < n ≤ 100).

11


Dòng thứ hai: gồm k số nguyên cho biết chỉ số của các bậc thang bị hỏng theo thứ
tự tăng dần.
Kết qủa
In ra số cách Lucky leo hết cầu thang mod K.


Ví dụ

LTVSTEPS. LTVSTEPS.
INP
OUT
42
0
23

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.
Example
Input:
6
2
10
3
2
5
1
Output:
4
Giải thích: dãy 2-Sum dài nhất tìm được là A[2..5] = {10, 3, 2, 5}Có thể tách dãy này
thành 2 phần {10} và {3, 2, 5} có tổng bằng 10

12


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.
Dữ liệu vào
Dòng đầu tiên chứa 2 số nguyên dương n, m theo thứ tự là số điểm hẹn và số chỗ ngồi
của xe buýt
Dòng thứ i trong số n dòng tiếp theo chứa số nguyên ti là thời gian cần thiết để xe buýt di
chuyển từ điểm hẹn thứ i đến điểm hẹn thứ i+1 (điểm hẹn thứ n+1 sẽ là trụ sở làm việc
của công ty) và số nguyên k là số lượng nhân viên đến điểm hẹn i, tiếp theo k số nguyên
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.
Ví dụ
Dữ liệu mẫu
32
3243
13637
515

13


Kết qủa
10
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)

ví dụ với n = 12
SAMPLE INPUT
2
8
12
-1
SAMPLE OUTPUT
3
153
2131

8. Xếp hàng mua vé-NKTick

14


Có N người sắp hàng mua vé dự buổi hoà nhạc. Ta đánh số họ từ 1 đến N theo thứ tự
đứng trong hàng. Mỗi người cần mua một vé, song người bán vé được phép bán cho mỗi
người tối đa hai vé. Vì thế, một số người có thể rời hàng và nhờ người đứng trước mình
mua hộ vé. Biết ti là thời gian cần thiết để người i mua xong vé cho mình. Nếu người i+1
rời khỏi hàng và nhờ người i mua hộ vé thì thời gian để người thứ i mua được vé cho cả
hai người là ri.
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)
Kết qủa
NKTICK.IN
P
5
25784
4 9 10 10

NKTICK
.OUT
18

In ra tổng thời gian phục vụ nhỏ nhất.
Ví dụ

9. Nối mạng phòng máy-NKCABLE
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.
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ả
NKCABLE.IN
P
6
2
2
3
2
2

NKCABLE
.OUT
7

Ghi ra độ dài của cáp nối cần sử dụng.
Ví dụ

15


10. Nối mạng phòng máy-LTVCABLE

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ụ NKCABLE.INP
6
2
2
3
2
2


NKCABLE .OUT
7
1-2
3-4
5-6

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.

16


Input

LATGACH.IN
P
Gồm nhiều test, dòng 3
( T<=100 ).
1
T dòng sau mỗi dòng 2
3
Output

LATGACH
.OUT
1
2

3

đầu ghi số lượng test T
ghi một số N.

Ghi ra T dòng là số cách lát tương ứng.

12. 0 0 Pairs – M00PAIR – SPOJ
Ban đầu dãy số có 1 số 1. Dãy biến đổi theo quy tắc : 0 thành 1 0 và 1 thành 0 1.
Lần 1 :0 1
Lần 2 :1 0 0 1
Lần 3 :0 1 1 0 1 0 0 1

Đếm số cặp số 0 liên tiếp sau lần biến đổi thứ n
Input
Dãy số nguyên, không biết trước số lượng nhưng số nào <=1000.
Output
In ra kết quả với mỗi số đọc được
Sample
Sample Input
1
2
3
4
5
Sample output
0
1
1
3

5

17


13. 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
của hình lập phương nhìn từ mặt trước từ gần ra xa, mỗi nhóm gồm n dòng, mỗi dòng
gồm n số liệt kê các số trên lớp cắt từ trên xuống dưới, trái qua phải.
Chú ý: n <= 30. Giá trị của khối lập phương đơn vị thuộc kiểu integer.
Output
Mỗi dòng chứa tổng của khối lập phương con lớn nhất của test tương ứng.
Example
Input:
2
3
0 -1 3
-5 7 4
-8 9 1
-1 -3 -1
2 -1 5
0 -1 3
3 1 -1
132
1 -2 1

4
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111

18


1111
1111
1111
Output:
27
64
14. Chia nhóm- BCDIV
Cho n phần tử khác nhau, hỏi có bao nhiêu cách chia n phần tử đó thành k nhóm mà mỗi
nhóm có ít nhất 1 phần tử (các hoán vị của các nhóm được xem là 1 cách).
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

Dữ liệu ra :
T dòng, mỗi dòng là số cách với test tương ứng.
Input:
1
42
Output:
7
Giải thích : 7 cách chia đó là (ABC)(D) , (ABD)(C) , (ADC)(B) , (DBC)(A) , (AB)(CD) ,
(AC)(BD) , (BC)(AD)

15. Condition - COND
Xét một tập N đối tượng có thể so sánh được (2<=n<=10). Giữa 2 đối tượng a và b có thể
tồn tại 1 trong 3 quan hệ phân loại:
a = b; a < b; a > b;
Như vậy, với 3 đối tượng (a, b, c) có thể tồn tại 13 quan hệ phân loại như sau:
a = b = c; a = b < c; c < a = b; a < b = c
b = c < a; a = c < b; b < a = c; a < b < c
a < c < b; b < a < c; b < c < a; c < a < b
c < b < a;
Cho số n, hãy xác định số lượng quan hệ phân loại khác nhau.
Input
Gồm nhiều số n. Mỗi số trên 1 dòng. Kết thúc file là -1.
Output

19


Với mỗi n, đưa ra số lượng quan hệ phân loại tìm được, mỗi số trên 1 dòng (không có
dòng trống).
Example

Input:
2
3
-1
Output:
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
Eg:
Input :
42
Output
6
Giải thích output(C=bò cái , B:bò đực)

20



CCCC
BCCC
CBCC
CCBC
CCCB
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• 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ố A 1, A2, ...,
AN (0Output:
• 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ỳ.
NTSEQS.INP NTSEQS
.OUT
56
1
12435
11010


21


Phần 4: Lý thuyết đồ thị 2-Đồ thị có trọng số, Đường đi ngắn nhất:

- Hệ thống bài tập trong phần “Đồ thị” thuộc “Tài liệu giảng dạy lập trình
khối THPT” quyển 2 .
- Một số bài tập phát triển dùng để tham khảo:
1. ISPATH1
Cho một đồ thị vô hướng . Hai đỉnh s, t được gọi là có liên hệ với nhau nếu sau ít nhất
một hành trình thì từ đỉnh s ta có thể đến được đỉnh t.
Bạn là một học sinh chuyên tin thì việc tìm đường đi sẽ rất dễ dàng. Nhưng hôm nay thầy
giáo giao cho bạn một nhiệm vụ: thầy cho một đồ thị vô hướng và một đường đi từ s đến
t. Nhiệm vụ của bạn là kiểm tra xem đó có phải là một đường đi hợp lệ hay không?
Yêu cầu: Cho đồ thị là đồ thị vô hướng và một đường đi. Hãy kiểm tra xem đường đi đó
hợp lệ hay không?
Input:
- Dòng thứ nhất chứa số đỉnh n của đồ thị (). Số cung .
- Dòng thứ hai ghi hai số là đỉnh s và đỉnh t (s, t).
- Dòng thứ i trong M dòng tiếp theo: mỗi dòng chứa 2 số
INPU OUTP
nguyên là cung nối đỉnh và đỉnh .
T
UT
- Dòng cuối cùng ghi một đường đi từ đỉnh s đến đỉnh t. Đường 5 5
YES
đi được biểu diễn bằng một dãy các số nguyên biểu diễn các
14
đỉnh bắt đầu từ s và kết thúc ở t.
12

25
Output :
45
- Một kết quả duy nhất cho biết đường đi đã cho có hợp lệ hay 2 3
không:
34
o YES: nếu đường đi hợp lệ.
123
o NO: nếu đường đi không hợp lệ.
4

22


2. ISPATH2
Cho một đồ thị có hướng . Hai đỉnh s, t được gọi là có liên hệ với nhau nếu sau ít nhất
một hành trình thì từ đỉnh s ta có thể đến được đỉnh t.
Bạn là một học sinh chuyên tin thì việc tìm đường đi sẽ rất dễ dàng. Nhưng hôm nay thầy
giáo giao cho bạn một nhiệm vụ: thầy cho một đồ thị có hướng và
INPU OUTP
một đường đi từ s đến t. Nhiệm vụ của bạn là kiểm tra xem đó có
T
UT
phải là một đường đi hợp lệ hay không?
NO
Yêu cầu: Cho đồ thị là đồ thị có hướng và một đường đi. Hãy kiểm 5 5
14
tra xem đường đi đó hợp lệ hay không?
12
Input:

25
- Dòng thứ nhất chứa số đỉnh n của đồ thị (). Số cung .
45
- Dòng thứ hai ghi hai số là đỉnh s và đỉnh t (s, t).
32
- Dòng thứ i trong M dòng tiếp theo: mỗi dòng chứa 2 số
34
nguyên là cung nối đỉnh và đỉnh .
123
- Dòng cuối cùng ghi một đường đi từ đỉnh s đến đỉnh t. Đường 4
đi được biểu diễn bằng một dãy các số nguyên biểu diễn các đỉnh bắt đầu từ s và
kết thúc ở t.
Output :
- Một kết quả duy nhất cho biết đường đi đã cho có hợp lệ hay không:
o YES: nếu đường đi hợp lệ.
o NO: nếu đường đi không hợp lệ.

23


3. HIGHWAYS1 Đường cao tốc
[bản dễ của />Có n thành phố nối với nhau bởi một hệ thống đường cao tốc hai chiều. Giữa hai thành
phố chỉ có nhiều nhất là 1 đường cao tốc nối trực tiếp với nhau. Thời gian để đi giữa hai
thành phố i và j được tính là thời gian để đi trên các con đường cao tốc để đi từ thành phố
i đến thành phố j.
Yêu cầu: Cho biết số thành phố và sơ đồ đường cao tốc. Hãy cho biết thời gian để đi từ
thành phố i đến thành phố j. Nếu có nhiều lựa chọn thì chỉ chọn một phương án bất kỳ.
Input:
- Dòng đầu là số thành phố n (). Số đường cao tốc m (). Hai số i, j là số hiệu hai
thành phố.

- Dòng thứ i trong m dòng sau:
o Mỗi dòng ghi 3 số là số hiệu của hai thành phố có đường cao tốc nối trực
tiếp và thời gian đi trên đường cao tốc đó.
INPU OUTP
Output:
Nếu có tồn tại một con đường từ i đến j:
- Dòng đầu ghi thời gian đi từ thành phố i đến thành phố j.
- Dòng tiếp theo ghi hành trình tương ứng với thời gian đã chọn.
Nếu không có con đường nào nối từ i đến j thì xuất NO.

T
551
4
123
253
451
235
346

UT
14
1234

24


4. PATHLEN
Cho đồ thị có n đỉnh và m cung. Các đỉnh được đánh số từ 1  N , trọng số của các
cung không âm.
Yêu cầu: Hãy tìm một đường đi từ đỉnh 1 đến đỉnh T cho trước và độ dài đường đi tìm

được.
Input:
- Dòng thứ nhất chứa số đỉnh n của đồ thị (). Số cung . Và đỉnh t ().
- Dòng thứ i trong M dòng tiếp theo: mỗi dòng chứa 3 số nguyên là cung nối đỉnh
và đỉnh với trọng số .
INPU OUTP
T
UT
Output:
554 1234
- Nếu không có đường đi từ đỉnh 1 đến đỉnh T thì xuất -1
1 2 3 14
- Nếu có đường đi từ đỉnh 1 đến đỉnh T thì xuất 2 dòng:
o Dòng 1: Các đỉnh xuất hiện trên đường đi từ đỉnh 1 đến 2 5 3
451
đỉnh T.
235
o Dòng 2: Độ dài đường đi tìm được.
346

25


×