Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
889 KB
Nội dung
ỨNG DỤNG STACK ĐỂ GIẢI MỘT SỐ BÀI TOÁN ÔN THI HSG
Việc bồi dưỡng học sinh giỏi tin học, tạo nguồn sinh viên giỏi và đáp ứng yêu cầu
đào tạo nhân lực chất lượng cao của xã hội là một việc cực kỳ cấp bách trong giai đoạn
hiện nay. Vì vậy cùng với các trường chuyên trong vùng chúng tôi luôn trăn trở làm thế
nào để nâng cao chất lượng dạy tin học nhất là đối với chương trình chuyên. Điều đó
thôi thúc đội ngũ giáo viên chuyên phải tìm tòi, nghiên cứu và sáng tạo.
Trong chương trình ôn luyện và bồi dưỡng học sinh giỏi, vấn đề sử dụng cấu trúc
dữ liệu đặc biệt để giải các bài là một trong những vấn đề rất hay nhưng cũng rất khó.
Hiện nay, phổ biến rất nhiều loại cấu trúc dữ liệu khác nhau như:
- STACK – ngăn xếp
- QUEUE – hàng đợi
- HASH TABLE – bảng băm
- HEAP – Đống
- BINARY SEARCH TREE – Cây tìm kiếm nhị phân
- SEGMENT TREE – Cây phân đoạn (thường gọi là INTERVAL TREE)
- BINARY INDEXED TREE – Cây nhị phân được lập chỉ mục
-…
Trong bài viết này, tôi không có ý định sử dụng hết các cấu trúc dữ liệu đặc biệt
trên để giải các bài toán, mà chỉ đi sâu vào một cấu trúc dữ liệu đơn giản nhưng nếu biết
sử dụng nó thì sẽ giải quyết rất hiệu quả một số bài toán – Cấu trú dữ liệu STACK.
Về định nghĩa và các thao tác sử dụng của STACK thì ai cũng biết tôi không trình
bày lại, trong bài viết này tôi sẽ trình bày giải một số bài toán có liên quan tới việc sử
dụng cấu trúc dữ liệu đặc biệt này.
1
Bài 1. Chiến trường Ô qua – Nguồn bài: vn.spoj.com
Lại nói về Lục Vân Tiên, sau khi vượt qua vòng loại để trở thành Tráng Sỹ, anh
đã gặp được Đôrêmon và được chú mèo máy cho đi quá giang về thế kỷ 19. Trở lại quê
hương sau nhiều năm xa cách, với tấm bằng Tráng Sỹ hạng 1 do Liên Đoàn Type Thuật
cấp, anh đã được Đức Vua cử làm đại tướng thống lãnh 3 quân chống lại giặc Ô Qua
xâm lăng.
Đoàn quân của anh sẽ gồm N đại đội, đại đội i có A[i] (A[i] > 0) người. Quân sỹ
trong 1 đại đội sẽ đứng thành 1 cột từ người 1 -> người A[i] , như vậy binh sỹ sẽ đứng
thành N cột. Vì Vân Tiên quyết 1 trận sẽ đánh bại quân Ô Qua nên đã cử ra 1 quân đoàn
hùng mạnh nhất. Trong sử cũ chép rằng, quân đoàn của Vân Tiên cử ra lúc đó là một
nhóm các đại đội có chỉ số liên tiếp nhau (tức là đại đội i , i + 1 , … j) - Vì sử sách thì
mối mọt hết cả nên chỉ biết được mỗi thế. Ngoài ra theo giang hồ đồn đại thì sức mạnh
của 1 quân đoàn = số người của đại đội ít người nhất * số đại đội được chọn.
Nhiệm vụ của bạn là dựa trên các thông số của các nhà khảo cổ có được , hãy cho
biết quân đoàn mà Vân Tiên đã chọn ra là từ đại đội nào đến đại đội nào. Chú ý nếu có
nhiều phương án thì ghi ra phương án mà chỉ số của đại đội đầu tiên được chọn là nhỏ
nhất .
Input
• Dòng 1 : Số T là số bộ test .
• T nhóm dòng tiếp theo , mỗi nhóm dòng mô tả 1 bộ test . Nhóm dòng thứ i :
o Dòng 1: N (N [...]... nhảy của nó} thì tăng số bước nhảy của mỗi con ếch này và loại bỏ khỏi ra khỏi STACK2 những con ếch đã hoàn thành số bước nhảy của nó - Nếu H[i] H [STACK1 [top1]] {nghĩa là con ếch ở vị trí STACK1 [top1] có thể nhảy đến bãi rác i} khi đó sẽ loại bỏ các vị trí ở đỉnh STACK1 Trong quá trình... sẽ luôn duy trì một STACK1 (lưu chỉ số của các con ếch) ở trạng thái tăng dần về độ cao của các bãi rác từ dưới đáy lên trên đỉnh Xét tại vị trí bãi rác thứ i: cần tìm phía trước i có những con ếch nào (chưa nhảy hết bước nhảy của nó) mà có thể nhảy được đến i Để làm việc này ta sử dụng STACK2 để lưu lại vị trí của các con ếch chưa nhảy hết các bước nhảy của nó Xét bãi rác thứ i: - Nếu H[i] > H [STACK2 [top2]]... loại bỏ sẽ tăng số bước nhảy của con ếch ở vị trí STACK1 [top1] lên 1 đơn vị và gán lại độ cao mới của con ếch ở vị trí STACK1 [top1] là vị trí H[i], và xem xét nó đã hoàn thành số bước nhảy chưa: + Nếu đã hoàn thành thì vị trí mới của con ếch ở vị trí STACK1 [top1] chính là vị trí i, tức là gán H [STACK1 [top1]] = H[i] + Nếu chưa hoàn thành thì đẩy vị trí của con ếch ở STACK1 [top1] sang STACK2 Sau khi xét... Dữ liệu: Vào từ file văn bản FROGS.INP: • Dòng đầu tiên chứa số nguyên n, • Dòng thứ 2 chứa n số nguyên h0, h1, …, hn-1, • Dòng thứ 3 chứa n số nguyên J0, J1, …, Jn-1 Kết quả: Đưa ra file văn bản FROGS.OUT một dòng chứa n số nguyên – độ cao nơi ở mới của mỗi chú ếch Ví dụ: FROGS.INP FROGS.OUT 4 5 5 -1 -1 8 8 -1 8 31456238 * Hướng dẫn thuật toán: Nhận xét: Nếu hai con ếch ở hai vị trí i, j (i < j) cùng...Ví dụ: có 8 đống rác với độ cao tương ứng từ trái sang phải là 3, 1, 4, 5, 6, 2, 3 và 8 Số bước nhảy mỗi chú ếch có thể thực hiện là 1, 2, 1, 3, 4, 2, 1, 2 Sau khi di chuyển hết khả năng của mình, chú ếch ở đống rác 0 sẽ tới được đống rác 2 với độ cao là 4, còn chú ... phần tử A [STACK[ top]] (trong top phần tử đỉnh STACK) - Nếu A[i] > A [STACK[ top]] bổ sung i vào STACK L[i] = STACK[ top] - Nếu A[i] A [STACK[ top]]... dương không vượt 109 ≤ N ≤ 106 60% số test có ≤ N ≤ 2000 80% số test có ≤ N ≤ 105 Ví dụ: Input 5243314 Output Giải thích: Hình minh họa phương án tối ưu * Hướng dẫn thuật toán: Bài toán giống toán. .. A[L[i]] cho L[i] < i L[i] gần với i để A[L[i]]