1. Trang chủ
  2. » Giáo Dục - Đào Tạo

skkn cấu trúc dữ liệu nâng cao trong bồi dưỡng học sinh giỏi cấp tỉnh môn tin học

52 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cấu trúc dữ liệu nâng cao trong bồi dưỡng học sinh giỏi cấp tỉnh môn Tin học
Tác giả Đỗ Minh Thuấn, Phan Quang Hương
Trường học Trường THPT Chuyên Bắc Giang
Chuyên ngành Tin học
Thể loại Sáng kiến kinh nghiệm
Năm xuất bản 2023 - 2024
Thành phố Bắc Giang
Định dạng
Số trang 52
Dung lượng 13,54 MB

Nội dung

Giải pháp này nhằm mục đích hệ thống một số bài tập sử dụng cấu trúc dữ liệunâng cao, làm tài liệu tham khảo cho giáo viên, giúp giáo viên có cái nhìn tổng quanvề các dạng bài tập về sử

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO BẮC GIANG

TRƯỜNG THPT CHUYÊN BẮC GIANG

-*** -SÁNG KIẾN KINH NGHIỆM

CẤU TRÚC DỮ LIỆU NÂNG CAO TRONG

BỒI DƯỠNG HỌC SINH GIỎI CẤP TỈNH MÔN TIN HỌC

Nhóm tác giả:

1 Đỗ Minh Thuấn – Tổ phó chuyên môn

2 Phan Quang Hương – Giáo viên Tổ: Toán – Tin

Năm học: 2023 - 2024

Trang 2

PHỤ LỤC

THUYẾT MINH MÔ TẢ GIẢI PHÁP VÀ KẾT QUẢ THỰC HIỆN SÁNG KIẾN 3

1 Tên sáng kiến: Cấu trúc dữ liệu nâng cao trong bồi dưỡng học sinh giỏi cấp tỉnh 3 2 Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử: Tháng 10 năm 2023 3

3 Các thông tin cần được bảo mật 3

4 Mô tả các giải pháp cũ thường làm 3

5 Sự cần thiết phải áp dụng giải pháp sáng kiến 3

6 Mục đích của giải pháp sáng kiến 3

7 Nội dung 4

7.1 Thuyết minh giải pháp mới hoặc cải tiến 4

7.2 Thuyết minh về phạm vi áp dụng sáng kiến 9

7.3 Thuyết minh về lợi ích kinh tế, xã hội của sáng kiến 9

PHỤ LỤC SỐ 1: MỘT SỐ BÀI ĐƠN GIẢN SỬ DỤNG CẤU TRÚC DỮ LIỆU 11

I Bài toán đếm phần tử là bội của k 11

II Bài toán các số khác nhau 12

III Bài toán số duy nhất 13

IV Bài toán xóa xố 14

V Bài toán dãy ngoặc đúng 15

VI Trạm xăng 16

PHỤ LỤC SỐ 2: MỘT SỐ BÀI TẬP ỨNG DỤNG SỬ DỤNG CẤU TRÚC DỮ LIỆU 18 I Bài toán phần thưởng 18

II Bài toán đếm cặp 19

III Bài toán xếp hàng 20

IV Bài toán tìm max 22

V Bài toán ba điểm thẳng hàng 23

VI Bài toán phần thưởng (đề thi học sinh giỏi tỉnh năm 2020) 25

PHỤ LỤC SỐ 3: MỘT SỐ BÀI TẬP KHÓ SỬ DỤNG CẤU TRÚC DỮ LIỆU 27

I Bài toán Trọng số (Nguồn Codeforces) 27

II Bài toán chia đôi mảng 29

III Bài toán Beginner Free Contest 34 30

IV Bài toán dãy con liên tiếp có tổng chia hết cho k (đề thi học sinh giỏi năm 2023) 32

V Hình chữ nhật lớn nhất 35

VI Phần thưởng (đề thi học sinh giỏi tỉnh năm 2022) 40

PHỤ LỤC SỐ 3: BIÊN BẢN XÁC NHẬN ÁP DỤNG GIẢI PHÁP Ở CÁC TRƯỜNG 44 TÀI LIỆU THAM KHẢO 50

Trang 3

SỞ GD&ĐT BẮC GIANG

TRƯỜNG THPT CHUYÊN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do - Hạnh phúc

THUYẾT MINH MÔ TẢ GIẢI PHÁP VÀ KẾT QUẢ THỰC HIỆN SÁNG KIẾN

1 Tên sáng kiến: Cấu trúc dữ liệu nâng cao trong bồi dưỡng học sinh giỏi cấp tỉnh

môn Tin học.

2 Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử: Tháng 10 năm 2023

3 Các thông tin cần được bảo mật (Nếu có): không

4 Mô tả các giải pháp cũ thường làm

Trong những năm gần đây trong đề thi học sinh giỏi cấp tỉnh đã đưa các bài toán

sử dụng cấu trúc dữ liệu nâng cao vào đề thi Trước đây, việc hướng dẫn học sinh giảimột bài toán về dạng này các thày cô thường hướng học sinh tiếp cận bài toán bằngphương pháp sử dụng cấu trúc dữ liệu chuẩn, đơn giản Với phương pháp này các em

dễ cài đặt Chương trình đơn giản, ít sai sót tuy nhiên việc thực hiện chương trìnhthường quá thời gian với bộ dữ liệu input lớn Do đó phương pháp này thường chỉ phùhợp với các bài toán có kích thước nhỏ

Những năm gần đây yêu cầu trong đề thi học sinh giỏi: đòi hỏi một thuật toánthỏa mãn được giới hạn bộ nhớ, giới hạn thời gian thực hiện thì phương pháp sử dụngcác cấu trúc dữ liệu chuẩn, đơn giản sẽ không được điểm tối đa

5 Sự cần thiết phải áp dụng giải pháp sáng kiến

Qua nhiều năm bồi dưỡng học sinh giỏi tin học cấp trung học phổ thông và một

số cuộc thi Duyên Hải, Hùng Vương, tôi tìm hiểu nhiều tài liệu, tìm các dạng bài tập

để hướng dẫn cho học sinh Với những bài toán có sử dụng cấu trúc dữ liệu nâng cao

mà sử dụng cấu trúc dữ liệu chuẩn thì giải không cao

Cấu trúc đề thi học sinh giỏi hiện nay phân hóa học sinh bằng các thuật toán từđơn giản đến phức tạp Bài thi của thí sinh được chấm bằng phần mềm Themis:

- Bài thi được chấm bằng các test, có so sánh thời gian chạy chương trình của cácthí sinh để đánh giá Các test của mỗi câu được chỉ rõ về số lượng, giới hạn dữ liệu, sốđiểm tương ứng đạt được

- Các bài toán trong đề có tỉ lệ % theo yêu cầu mức độ mục tiêu của đề Trongmột bài toán thường có phần vận dụng cao đòi hỏi học sinh phải sử dụng thuật toán tối

ưu mới đảm bảo thời gian thực hiện chương trình

Để đạt được điểm cao, học sinh không những phải giải hết các bài toán mà vớimỗi bài toán học sinh còn cần lựa chọn được thuật toán sao cho đáp ứng hết các bộ testtrong bài Học sinh cần tiếp cận thuật toán mới có thể đạt giải cao trong kỳ thi học sinhgiỏi cấp tỉnh

6 Mục đích của giải pháp sáng kiến

Các giải pháp của sáng kiến là tài liệu tham khảo rất phù hợp cho giáo viên trongbồi dưỡng học sinh giỏi Cụ thể:

Giải pháp 1: Lựa chọn các bài tập sử dụng cấu trúc dữ liệu nâng cao đơn giản để

giúp học sinh làm quen với dạng bài tập này

Trang 4

Giải pháp này nhằm mục đích hệ thống một số bài tập sử dụng cấu trúc dữ liệunâng cao, làm tài liệu tham khảo cho giáo viên, giúp giáo viên có cái nhìn tổng quan

về các dạng bài tập về sử dụng cấu trúc dữ liệu nâng cao; đồng thời sử dụng để bồidưỡng học sinh giỏi giúp học sinh giải các bài toán sử dụng cấu trúc dữ liệu nâng cao

Giải pháp 2: Lựa chọn các bài tập sử dụng cấu trúc dữ liệu nâng cao và áp

dụng vào giảng dạy để củng cố, rèn luyện kỹ năng giải bài toán bằng phương phápứng dụng sử dụng cấu trúc dữ liệu nâng cao cho học sinh

Giải pháp này nhằm mục đích củng cố, rèn kỹ năng giải toán bằng phươngpháp ứng sử dụng cấu trúc dữ liệu nâng cao cho học sinh Học sinh được thực hành,

ôn luyện các bài toán cùng dạng, giúp học sinh biết phân tích bài toán, điểm khácbiệt và điểm chung của bài tập tương tự với sử dụng cấu trúc dữ liệu nâng cao đơngiản qua đó giúp học sinh cải tiến thuật toán

Giải pháp 3: Lựa chọn các bài toán sử dụng cấu trúc dữ liệu nâng cao để giải các

bài toán khó

Với mỗi bài toán có thể có nhiều cách giải khác nhau, giải pháp đưa ra một sốcách giải bài toán, trong đó có ứng dụng sử dụng cấu trúc dữ liệu nâng cao để giải cácbài toán khó giúp học sinh lựa chọn thuật toán tối ưu:

Giải pháp 4: Đánh giá giải pháp khi áp dụng với một số trường THPT

Đánh giá tính khả thi của giải pháp với điều kiện trường THPT Chuyên BắcGiang, trường THPT Ngô Sĩ Liên, THPT Thái Thuận và THPT DTNT Tỉnh Đánhgiá hiệu quả của giải pháp đối với học sinh trong việc củng cố, rèn kỹ năng giảitoán bằng phương pháp sử dụng cấu trúc dữ liệu nâng cao nhằm giúp học sinh yêuthích môn học, chọn được cách tối ưu khi giải các bài toán tin học, phát triển tưduy, phẩm chất và năng lực của học sinh

Kết hợp 4 giải pháp trên, sáng kiến kinh nghiệm góp phần giúp nhận diện bàitoán có sử dụng cấu trúc dữ liệu nâng cao khi lựa chọn thuật toán tối ưu, góp phầntổng kết kinh nghiệm của bản thân, chia sẻ, giúp đỡ đồng nghiệp trong việc tìm hiểu vàthực hiện bồi dưỡng học sinh giỏi đạt hiệu quả cao nhất

7 Nội dung

7.1 Thuyết minh giải pháp mới hoặc cải tiến

* Giải pháp 1:

- Tên giải pháp: Lựa chọn các bài tập sử dụng cấu trúc dữ liệu nâng cao đơn giản

để giúp học sinh làm quen với dạng bài tập về sử dụng cấu trúc dữ liệu nâng cao

- Nội dung: Chọn một số bài tập về sử dụng cấu trúc dữ liệu nâng cao đơn giản

+ Đếm phần tử là bội của k: Viết chương trình nhập vào 2 số nguyên dương m, n

và mảng 2 chiều gồm m x n phần tử là các số nguyên Đếm các phần tử của mảng làbội của số nguyên k cho trước;

ra số lượng các số đôi một khác nhau trong dãy

Trang 5

+ Số duy nhất: Cho nguyên dương n và dãy A gồm n số nguyên dương A1, A2,

…, An Số duy nhất là số xuất hiện 1 lần trong dãy số A;

A2, …, An Loại khỏi dãy các phần tử giống nhau

+ Dấu ngoặc đúng: cho một dãy dấu ngoặc, thông báo dãy ngoặc là dãy ngoặcđúng hay dãy ngoặc sai

ít chi phí nhất để đi được n km

- Các bước tiến hành thực hiện giải pháp:

Bước 1: Thu thập tài liệu từ nhiều nguồn khác nhau

Bước 2: Lựa chọn một số bài toán dãy sử dụng cấu trúc dữ liệu nâng cao

Bước 3: Với mỗi dạng nêu bài toán, thuật toán và cài đặt

- Kết quả khi thực hiện giải pháp: Đã lựa chọn được một số dạng bài toán sử

dụng cấu trúc dữ liệu nâng cao đơn giản: sử dụng cấu trúc dữ liệu nâng cao, các số

khác nhau, số duy nhất, xóa số, dấu ngoặc đúng (Chi tiết tại phụ lục số 1)

* Giải pháp 2:

- Tên giải pháp: Lựa chọn các bài tập sử dụng cấu trúc dữ liệu nâng cao

- Nội dung: Với mỗi bài toán sử dụng cấu trúc dữ liệu nâng cao, các bài tập

tương tự cùng dạng được đưa ra và áp dụng giảng dạy bồi dưỡng học sinh giỏi để củng

cố, rèn kỹ năng giải bài toán bằng phương sử dụng cấu trúc dữ liệu nâng cao cho họcsinh nhằm nâng cao chất lượng bồi dưỡng học sinh giỏi

+ Phần thưởng: cho mảng 2 chiều gồm m x n phần tử là các số nguyên Tính tổng

các số trong một hình chữ nhật con có ô trái trên là ô (x,y) và ô phải dưới là ô (u,v);

+ Đếm cặp: cho mảng n số nguyên dương a1, a2, , an (n≤106, ai≤106) và số

- Các bước tiến hành thực hiện giải pháp:

Bước 1: Thu thập tài liệu từ nhiều nguồn khác nhau

Bước 2: Lựa chọn một số bài toán sử dụng cấu trúc dữ liệu nâng cao

Bước 3: Với mỗi dạng nêu bài toán, thuật toán và cài đặt

- Kết quả khi thực hiện giải pháp: Đã lựa chọn được một số dạng bài toán sử

dụng cấu trúc dữ liệu nâng cao (Chi tiết tại phụ lục số 2)

Trang 6

* Giải pháp 3:

- Tên giải pháp: Lựa chọn các bài toán khó sử dụng cấu trúc dữ liệu nâng cao để giải.

- Nội dung: Sử dụng cấu trúc dữ liệu nâng cao vào giải các bài toán khó

- Các bước tiến hành thực hiện giải pháp: Với mỗi bài toán, phân tích bài toán,

đưa ra một số cách giải quyết bài toán đó, sau đó so sánh với việc sử dụng cấu trúc dữliệu nâng cao vào giải, đánh giá độ phức tạp thuật toán

+ Trọng số;

+ Chia mảng;

+ Beginner Free Contest 34;

+ Dãy con liên tiếp có tổng chia hết cho k (đề thi học sinh giỏi tỉnh năm 2023);+ Hình chữ nhật lớn nhất;

+ Phần thưởng (đề thi học sinh giỏi tỉnh năm 2022);

- Kết quả khi thực hiện giải pháp:

+ Sản phẩm được tạo ra từ giải pháp: Phân tích thuật toán, ứng dụng thuật toán

sắp xếp và tìm kiếm nhị phân vào giải bài toán và cài đặt (Chi tiết tại phụ lục số 3)

* Giải pháp 4:

- Tên giải pháp: Đánh giá giải pháp khi áp dụng với một số trường THPT

- Nội dung: Áp dụng giải pháp cho công tác bồi dưỡng HSG cấp tỉnh đối với

trường THPT Chuyên, Trường THPT Ngô Sĩ Liên, Trường THPT Thái Thuận, TrườngTHPT DTNT Tỉnh Đánh giá kết quả thực hiện các trường trên

- Các bước tiến hành thực hiện giải pháp:

Bước 1: Chọn các bài toán sử dụng cấu trúc dữ liệu nâng cao đã tiến hành trong giải

+ Năm học 2023-2024: giới thiệu sáng kiến kinh nghiệm tới giáo viên bồi dưỡng

TT Họ và tên Nơi công tác Số điện thoại Trình độ

chuyên môn Chức vụ

Trang 7

+ Năm học 2023-2024: giới thiệu sáng kiến kinh nghiệm tới giáo viên bồi dưỡng

TT Họ và tên Nơi công tác Số điện thoại Trình độ

chuyên môn Chức vụ

1 Chu Thị Tú Anh THPT DTNT Tỉnh 0983912559 Đại học Tổ trưởng

chuyên môn

Bước 3: Tổ chức thực hiện sáng kiến kinh nghiệm.

Chọn học sinh khá, giỏi, học sinh trong đội tuyển làm bài kiểm tra trước khi thựchiện sáng kiến kinh nghiệm, sau đó lấy 1 số học sinh để tham gia bồi dưỡng nội dungtrong sáng kiến kinh nghiệm, cuối cùng cho bài kiểm tra sau khi thực hiện sáng kiếnkinh nghiệm gồm cả học sinh được tham gia và không tham gia bồi dưỡng nội dungsáng kiến kinh nghiệm:

Kiểm tra kiến thức trước khi thực hiện sáng kiến kinh nghiệm (Bài KT 1):

Thực hiện sáng kiến kinh nghiệm: triển khai dạy trong 3 tuần

Kiểm tra kiến thức sau quá trình bồi dưỡng (Bài KT 2)

Bước 4: Đánh giá tính khả thi của phương pháp, đánh giá hiệu quả của phương

pháp Tổ chức rút kinh nghiệm sau khi áp dụng sáng kiến

Đánh giá tính khả thi của phương pháp, đánh giá hiệu quả của phương pháp Đốitượng học sinh tham gia bồi dưỡng sáng kiến kinh nghiệm là các học sinh có lực họckhá, giỏi ở các lớp chọn và học sinh đội tuyển Ở phần này để đánh giá hiệu quả của hệthống bài tập tương tự các bài toán về sử dụng cấu trúc dữ liệu nâng cao đã đưa ra, tácgiả sử dụng kết quả kiểm tra trước khi thực hiện sáng kiến và kiểm tra sau khi thựchiện sáng kiến, đối chiếu những học sinh không tham gia bồi dưỡng sáng kiến vớinhững học sinh có tham gia bồi dưỡng sáng kiến qua các năm học: 2023 - 2024 tạiTrường THPT Chuyên Bắc Giang Năm học 2023-2024 tại trường THPT Ngô Sĩ Liên

và THPT Thái Thuận và THPT DTNT Tỉnh Bên cạnh việc đánh giá hiệu quả sángkiến qua cách thức kiểm tra học sinh trước và sau khi thực hiện sáng kiến còn đánh giáhiệu quả của sáng kiến qua bảng kết quả thi học sinh giỏi của các học sinh các trường

đã áp dụng sáng kiến từ năm 2022 đến nay

Sau khi hoàn thành nội dung 3 giải pháp đưa ra, tôi cùng các đồng nghiệp ápdụng sáng kiến trong giảng dạy bồi dưỡng học sinh giỏi môn tin theo các bước đã trìnhbày để tiếp tục hoàn thiện, phát triển Sáng kiến áp dụng cho việc giảng dạy và học tậpcủa giáo viên và học sinh tại trường THPT Chuyên Bắc Giang và một số trường THPTtrong tỉnh trong những năm học tiếp theo

- Kết quả khi thực hiện giải pháp: Sau quá trình thực hiện và tổng kết, rút kinh

nghiệm tác giả đã đạt được kết quả như sau:

Các bảng số liệu, biểu đồ so sánh kết quả trước và sau khi thực hiện giải pháp:

Trang 8

Bảng 1: Đối sánh kết quả trước và sau khi thực hiện sáng kiến kinh nghiệm năm học 2023-2024

TT Họ và tên học sinh Giới tính Trường THPT

Điểm bài KT

số 1

Điểm bài KT

số 2

Có vận dụng SK

(ghi chú “x”: là học sinh không tham gia bồi dưỡng sáng kiến - nhóm đối chứng)

Trang 9

Kết quả của nhóm được áp dụng sáng kiến trong bồi dưỡng HSG cấp tỉnh có em

Nguyễn Đức Kiên đạt 20/20 điểm Các em có kết quả trên 19 điểm là Đỗ Thành Vinh,

Nguyễn Lương Vinh, Hoàng Hà, Hoàng Văn Trà, Thân Hồng Dương

Các em học tại các trường THPT không chuyên được áp dụng sáng kiến đã đạt thành

tích tốt như em Nguyễn Trung Kiên, Nguyễn Minh Bảo, Nguyễn Lê Hoàng,…

Bảng 2: Bảng kết quả của các em học sinh trong các kì thi chọn HSG các cấp sau

khi thực hiện sáng kiến kinh nghiệm năm học 2023-2024

TT Họ và tên học sinh Giới

tính Trường THPT Điểm Giải

Ghi chú

4 Nguyễn Lương Vinh Nam Chuyên Bắc Giang 19.6/20 Nhì HSG Tỉnh

12 Nguyễn Tống Duy Long Nam THPT Ngô Sĩ Liên 14.9/20 Nhì HSG Tỉnh

13 Nguyễn Trung Kiên Nam THPT Thái Thuận 17.1/20 Nhất HSG Tỉnh

7.2 Thuyết minh về phạm vi áp dụng sáng kiến

- Sáng kiến đã được áp dụng trong giảng dạy bồi dưỡng học sinh giỏi trong năm2023-2024 (Kết quả 1 giải nhất, 2 giải nhì, 3 giải ba và 4 giải khuyến khích), chotrường THPT Chuyên Bắc Giang

- Năm học 2023-2024: áp dụng giảng dạy bồi dưỡng học sinh giỏi cho trườngTHPT Ngô Sĩ Liên, kết quả 2 học sinh đi thi được 1 giải Nhì

- Năm học 2023-2024: áp dụng giảng dạy bồi dưỡng học sinh giỏi cho trường THPTThái Thuận kết quả 3 học sinh đi thi được 1 giải nhất và 1 giải nhì

- Năm học 2023-2024: áp dụng giảng dạy bồi dưỡng học sinh giỏi cho trường THPTDTNT Tỉnh kết quả 2 học sinh đi thi được 2 giải khuyến kích

7.3 Thuyết minh về lợi ích kinh tế, xã hội của sáng kiến

-Về lợi ích kinh tế:

Tiết kiệm thời gian, công sức của giáo viên khi dạy chuyên đề cấu trúc dữ liệunâng cao trong bồi dưỡng học sinh giỏi Giải pháp trong sáng kiến kinh nghiệm có thểtiếp tục xây dựng mở rộng các dạng bài tương tự của các ứng dụng như duyệt nângcao, đồ thị, quy hoạch động để thành tư liệu tham khảo cho giáo viên, tự nghiên cứu,xây dựng của những năm học sau Qua đó tiết kiệm được các chi phí khác như: chi phí

đi lại, mua tài liệu tham khảo, …

- Về lợi ích xã hội:

Sáng kiến kinh nghiệm này là tài liệu tham khảo hữu ích, giúp giáo viên nâng caonăng lực chuyên môn, đóng góp hiệu quả cho công tác giảng dạy mũi nhọn bồi dưỡng

Trang 10

học sinh giỏi ở trường phổ thông, đồng thời góp phần định hướng phát triển năng lực

tư duy, năng lực tự học cho học sinh, giúp học sinh nhận diện được bài toán sử dụngcấu trúc dữ liệu nâng cao

* Cam kết: Chúng tôi xin cam đoan những điều khai trên là trung thực, đúng sự

thật và không sao chép hoặc vi phạm bản quyền

Trên đây chỉ là một vài kinh nghiệm của chúng tôi Chúng tôi rất mong nhậnđược sự đóng góp của Hội đồng sáng kiến cấp cơ sở và các thầy cô đồng nghiệp, đểgiải pháp của tôi có hiệu quả hơn trong những năm dạy học tiếp theo!

XÁC NHẬN CỦA TRƯỜNG THPT CHUYÊN BẮC GIANG

TÁC GIẢ SÁNG KIẾN

Đỗ Minh Thuấn

Phan Quang Hương

Trang 11

PHỤ LỤC SỐ 1: MỘT SỐ BÀI ĐƠN GIẢN SỬ DỤNG CẤU TRÚC DỮ LIỆU

NÂNG CAO

I Bài toán đếm phần tử là bội của k

1 Phát biểu bài toán

Viết chương trình nhập vào 2 số nguyên dương m, n và mảng 2 chiều gồm m x nphần tử là các số nguyên Đếm các phần tử của mảng là bội của số nguyên k cho trước

* Input: đọc vào từ file văn bản DEMK.INP gồm:

2 -3 -6 9 1

7 3 5 6 2

6

2 Thuật toán

- Duyệt các phần tử của vector, kiểm tra phần tử a[i][j] nếu a[i][j] chia hết cho kthì tăng đếm

Trang 12

II Bài toán các số khác nhau

1 Phát biểu bài toán

Cho số nguyên dương n và dãy số nguyên A1, A2, …, An Đưa ra số lượng các số đôimột khác nhau trong dãy

* Input: đọc từ file văn bản KHACNHAU.INP gồm:

- Dòng 2 ghi n số nguyên A1, A2, …, An (|Ai| 109, i=1 n) Các số cách nhau ítnhất 1 dấu cách

* Output: ghi ra file văn bản KHACNHAU.OUT gồm 1 số duy nhất là số

lượng các số đôi một khác nhau trong dãy

- Sử dụng cấu trúc dữ liệu set;

- Duyệt các phần tử của mảng, đẩy các phần tử vào set;

- Đưa ra kích thước của set, là kết quả bài toán

Trang 13

III Bài toán số duy nhất

1 Phát biểu bài toán

nhất là số xuất hiện 1 lần trong dãy số A

* Input: đọc từ file văn bản DUYNHAT.INP gồm:

- Dòng 2: ghi các số A1, A2, …, An (|Ai| 9) Mỗi số cách nhau ít nhất 1 dấu cách

* Output: ghi ra file văn bản DUYNHAT.OUT một số là số duy nhất trong dãy

- Sử dụng cấu trúc dữ liệu map;

- Duyệt các phần tử của mảng, nạp các phần tử của mảng vào map;

- Duyệt map, phần tử nào của map có duy nhất một phần tử thì đưa ra, là kếtquả bài toán

Trang 14

IV Bài toán xóa xố

1 Phát biểu bài toán

* Input: đọc từ file văn bản XOASO.INP gồm:

- Dòng 2 ghi n số nguyên A1, A2, …, An (|Ai| 109, i=1 n) Các số cách nhau ítnhất 1 dấu cách

* Output: ghi ra file văn bản XOASO.OUT gồm

- Dòng 1: ghi số lượng phần tử của mảng sau khi xóa;

- Dòng 2: các phần tử còn lại của dãy ban đầu sau khi xóa các phần tử giốngnhau (Các số được xắp theo thứ tự của dãy ban đầu)

- Sử dụng cấu trúc dữ liệu map;

- Duyệt các phần tử của mảng, nạp các phần tử của mảng vào map;

- Duyệt map, những phần tử nào của map có một phần tử thì đưa ra, là kết quảbài toán Các phần tử có ít nhất 2 phần tử thì loại khỏi dãy

Trang 15

for(int i=1;i<=n;i++)if(m[a[i]]==1)cout<<a[i]<<' ';

}

V Bài toán dãy ngoặc đúng

1 Phát biểu bài toán

Một dãy ngoặc đúng là một xâu ký tự gồm các ký tự ‘(’, ‘)’, ‘[’, ‘]’, ‘{’ và ‘}’được định nghĩa như sau:

- Xâu rỗng là một dãy ngoặc đúng;

- Nếu A, B là dãy ngoặc đúng thì AB (xâu tạo thành bằng cách nối xâu A với xâuB) cũng là 1 dãy ngoặc đúng;

- Nếu A là một dãy ngoặc đúng thì (A), [A] và {A} cũng là dấu ngoặc đúng

* Input: đọc từ file văn bản PARENTHESES.INP gồm:

- Dòng 1 ghi số nguyên dương n (n ≤ 10)

- n dòng tiếp theo, mỗi dòng chứa 1 xâu có độ dài là số nguyên dương không quá

106 chỉ gồm các ký tự ‘(’, ‘)’, ‘[’, ‘]’, ‘{’ và ‘}’

* Output: ghi ra file văn bản PARENTHESES.OUT ứng với mỗi xâu trong file

dữ liệu, ghi ra dòng YES nếu dòng đó là dãy ngoặc đúng, ngược lại ghi NO

* Example:

PARENTHESES.INP PARENTHESES.OUT4

{[()()[]()]}()[(])

([{}]){[()]}

{{{}}

YESNOYESNO

Trang 16

1 Phát biểu bài toán

Giáo sư X dự định thực hiện một chuyến đi bằng ô tô trên con đường dài n km tính từ km 0 (nơi xuất phát) tới km n (nơi kết thúc) Ô tô của giáo sư X có bình xăng dung tích là k lít, mỗi lít xăng cho phép ô tô đi được quãng đường dài đúng 1 km Tại mỗi mốc km, từ mốc km 0 tới mốc km n−1, có một trạm xăng, tại đó giáo sư

X có thể mua thêm xăng nạp vào bình, tuy nhiên bình xăng không thể chứa quá k lít

tính cả lượng xăng còn lại trong xe trước khi mua Giá xăng ở trạm xăng tại mốc km

thứ i là Ai một lít (∀i:0≤i<n).

Hãy tìm cách thực hiện chuyến đi với tổng số tiền mua xăng thấp nhất Biết rằnggiáo sư X xuất phát từ km số 0 với một bình xăng rỗng

* Input: đọc từ file văn bản GAS.INP gồm:

- Dòng 1 chứa hai số nguyên dương n, k (k≤n≤106);

* Output: ghi ra file văn bản GAS.OUT một số nguyên duy nhất là tổng số tiền

mua xăng theo phương án tìm được

Trang 18

PHỤ LỤC SỐ 2: MỘT SỐ BÀI TẬP ỨNG DỤNG SỬ DỤNG CẤU TRÚC DỮ LIỆU NÂNG CAO

I Bài toán phần thưởng

1 Phát biểu bài toán

Hiếu là người thắng cuộc trong một cuộc thi “Tìm hiểu kiến thức vũ trụ” và đượcnhận các phần thưởng do trung tâm TAS tài trợ Các phần thưởng được bố trí trên một bảng

kích thước m x n, các dòng của bảng được đánh số từ 1 đến m, từ trên xuống dưới và các cột của bảng được đánh số từ 1 đến n, từ trái qua phải Ô nằm trên giao của dòng i và cột j được gọi là ô (i, j) và trên ô đó chứa một món quà có giá trị là aij (1 i m, 1 j n)

Để nhận phần thưởng, Hiếu cần trả lời các câu hỏi có dạng: “Cho một hình chữ

nhật con có ô trái trên là ô (x,y) và ô phải dưới là ô (u,v), cần đưa ra tổng giá trị các

phần quà trong hình chữ nhật con này”

Yêu cầu: Cho giá trị các phần quà được đặt trên bảng và q bộ x k, yk, uk, vk (k = 1,

2, , q) tương ứng với q truy vấn, hãy đưa ra các câu trả lời cho q truy vấn

* Input: Vào từ file văn bản BONUS.INP gồm:

- Dòng thứ nhất chứa ba số nguyên dương m, n, q (q ≤ m x n);

- Dòng thứ i trong số m dòng tiếp theo chứa n số nguyên dương, số thứ j là a ij (aij

106);

- Dòng thứ k trong số q dòng tiếp theo chứa 4 số nguyên dương x k, yk, uk, vk (k = 1,

2, , q)

Các số trên cùng một dòng được ghi cách nhau ít nhất một dấu cách

* Output: Ghi ra file văn bản BONUS.OUT gồm q dòng, mỗi dòng chứa một số

là câu trả lời cho một truy vấn theo thứ tự xuất hiện trong file dữ liệu vào

- Sử dụng cấu trúc dữ liệu nâng cao, vector 2 chiều:

- Xây dựng vector S[i][j]=S[i-1][j]+S[i][j-1]-S[i-1][j-1]+A[i][j];

- Với mỗi truy vấn x, y, u, v đưa ra S[u][v]-S[u][y-1]-S[x-1][v]+S[x-1][y-1]

Trang 19

vector <int> A[N];

vector <long long> S[N];

for (int i=1; i<=n; i++)

for (int j=1; j<=m; j++) cin>>A[i][j];

for(int i=1; i<=n ;i++)

II Bài toán đếm cặp

1 Phát biểu bài toán

Cho mảng n số nguyên dương a1, a2, , an (n≤106, ai≤106) và số nguyên dương S(S≤106) Hãy đếm xem có bao nhiêu cặp (ai,aj) với i<j thỏa mãn ai+aj=S

Trang 20

* Input: đọc từ file văn bản DEM.INP gồm:

- Dòng 1 ghi 2 số nguyên dương n và S

- Các dòng tiếp theo ghi n số nguyên dương a1, a2, …, an

* Output: ghi ra file văn bản DEM.OUT một số duy nhất là số cặp (ai, aj) thỏamãn ai+aj=S

- Sử dụng cấu trúc dữ liệu nâng cao map;

- Duyệt tất cả các phần tử của mảng, với mỗi phần tử mảng đếm các phần tử A[i] và cộng các kết quả lại là kết quả bài toán

III Bài toán xếp hàng

1 Phát biểu bài toán

Trong giờ học đội ngũ, có n người xếp hàng dọc đánh số từ 1 tới n, người thứ i có chiều cao là hi Người có chỉ số nhỏ hơn đứng trước.

Sau khi xếp hàng, có một số người phàn nàn rằng anh ta bị người khác chắn tầm

mắt Cụ thể là người i bị người j chắn tầm mắt nếu:

Người j đứng trước người i (j<i),

Người j cao hơn người i (hj>hi),

Yêu cầu: Với mỗi người, cho biết anh ta bị người nào chắn tầm mắt.

Trang 21

* Input: đọc vào từ file văn bản LINEUP.INP gồm:

* Output: ghi ra file văn bản LINEUP.OUT n số k1, k2, …, kn cách nhau bởi dấu

cách Trong đó ki là số hiệu người chắn tầm mắt của người i Nếu người i không bị ai chắn tầm mắt, thì quy ước ki=0.

- Sử dụng cấu trúc dữ liệu stack;

- Duyệt các hi, kiểm tra các phần tử ở đỉnh stack nhỏ hơn hoặc bằng hi thì xóa phần tử ở đỉnh stack, đẩy i vào stack là tạo mảng k[i] là phần tử ở đỉnh stack (nếu stackrỗng thì ki=0);

- Đưa ra ki là kết quả bài toán

Trang 22

IV Bài toán tìm max

1 Phát biểu bài toán

Thầy giáo đưa cho Quang một mảng A gồm N phần tử và yêu cầu Quang với mỗi

* Input: đọc từ file văn bản TIMMAX.INP gồm:

- Dòng đầu tiên ghi số nguyên dương n (n≤200000);

nhau 1 dấu cách

* Output: ghi ra file văn bản TIMMAX.OUT gồm n số là đáp án cần tìm.

2 Thuật toán

Ta nhận thấy không tồn tại số cần tìm ứng với A[1] nên ta đầu tiên ta sẽ in ra -1.Cho lần lượt A[i] vào trong set (từ 1 đến N - 1) Sau mỗi lần cho A[i] và trongset, ta chặt nhị phân vị trí đầu tiên có giá trị lớn hơn hoặc bằng A[i+1] trên set

Trang 23

s.insert(a[0]);

for(int i=1; i<n; ++i) {

long long ans=-1;

V Bài toán ba điểm thẳng hàng

1 Phát biểu bài toán

Trong hệ tọa độ Đề Các vuông góc Oxy, cho N điểm phân biệt A1, A2, , AN Mỗi

phân biệt được gọi là thẳng hàng với nhau khi và chỉ khi chúng nằm trên cùng mộtđường thẳng

Yêu cầu: Hãy đếm trong số N điểm đã cho có bao nhiêu bộ ba điểm thẳng hàng?

Biết rằng hai bộ được gọi là khác nhau nếu chúng khác nhau ít nhất một điểm

* Input: Đọc từ tệp văn bản ABC.INP có cấu trúc như sau:

- Dòng đầu tiên ghi số nguyên dương N (3 < N < 2000);

- N dòng tiếp theo, mỗi dòng ghi 2 số nguyên xi và yi tương ứng là hoành độ và tung

độ của điểm Ai với i từ 1 đến N (|xi| < 105, |yi| < 105)

* Output: Ghi ra tệp văn bản ABC.OUT một số duy nhất là số bộ ba điểm thẳng

hàng tìm được

* Example:

3-1 -2

Cách 1: Kiểm tra tổng độ dài 2 đoạn thẳng bằng đoạn còn lại

AB+BC=AC hoặc AC+CB=AB hoặc BA+AC=BC

Cách 2: Kiểm tra điểm C thuộc đường thẳng AB

Cách 3: Dùng hàm ccw(A,B,C) xem có bằng 0 hay không

Subtask 2: Độ phức tạp O(n 3 )

Trang 24

Khởi tạo biến đếm res = 0;

Sử dụng 3 vòng lặp để duyệt mọi bộ 3 điểm (A[i], A[j], A[k]), với mỗi bộ takiểm tra xem chúng có thẳng hàng với nhau hay không, nếu có thẳng hàng thì tăng reslên 1 đơn vị

Subtask 3: Độ phức tạp O(n 2 logn)- Sử dụng cấu trúc dữ liệu map

Khởi tạo biến đếm res = 0;

Sử dụng 2 vòng lặp lồng nhau để duyệt mọi đường thẳng đi qua 2 điểm (A[i],A[j]), với mỗi đường thẳng đó ta đếm số điểm cùng nằm trên đường thẳng, là các điểm

có cùng hệ số góc = (y[i]-y[j])/(x[i]-x[j]); Gs có k điểm thẳng hàng Khi đó số bộ 3điểm thẳng hàng đúng bằng số tổ hợp không lặp chập 2 của k Tức là res += k*(k-1)/2;

Ở sub 3 chỉ cần lưu ý nếu x[i]-x[j]==0 thì gán hệ số góc bằng +oo;

3 Cài đặt

#include <bits/stdc++.h>

#define se second

using namespace std;

typedef pair <double, int> di;

const int oo=1e9+7;

const int maxn=1e6+7,N=2e3+7;

for(int i=1; i<=n; ++i){

map <double, int> m;

Trang 25

VI Bài toán phần thưởng (đề thi học sinh giỏi tỉnh năm 2020)

1 Phát biểu bài toán

Trong cuộc thi lập trình APOLO do công ty GRIS tổ chức, Tuấn đạt được danhhiệu “Coder xuất sắc” Nhà tài trợ Bin Gate cho phép Tuấn được tự lựa chọn phần

thưởng cho mình Trên khán đài xếp một dãy n hộp quà được đánh số thứ tự từ 1 đến

hộp quà liền nhau, đó là thử thách nhỏ của nhà tài trợ.

Yêu cầu: Bạn hãy cho biết Tuấn có thể chọn những hộp quà nào để tổng giá trị

của các hộp quà mà Tuấn chọn là lớn nhất?

* Input: vào từ file văn bản BONUS.INP gồm:

- Dòng 1 chứa hai số nguyên n và k (1≤ 𝑛 ≤ 106 ;2 ≤ 𝑘 ≤ 10 6 );

- Dòng 2 chứa n số nguyên dương a1, a2, …, an tương ứng là giá trị của n hộp quàcủa nhà tài trợ theo thứ tự liệt kê từ hộp quà thứ nhất tới hộp quà thứ 𝑛.

* Output: Ghi ra file văn bản BONUS.OUT một số duy nhất là tổng giá trị lớn

nhất của các hộp quà mà Tuấn có thể nhận được

- Sử dụng cấu trúc dữ liệu hàng đợi 2 đầu;

- Tính tổng các phần tử được chọn ít nhất trong đoạn k phần tử liên tiếp (res);

- Kết quả bài toán là tổng các phần tử của dãy trừ res;

long long f[maxn];

deque <long long > q;

Trang 26

f[i]=f[q.front()]+a[i];

while(!q.empty()&&f[i]<f[q.back()]) q.pop_back();

q.push_back(i);

}

long long ans=LLONG_MAX;

for (int i=n-k+1; i<=n; i++)

ans=min(ans,f[i]);

cout<<t-ans;

}

Ngày đăng: 01/08/2024, 14:58

w