Trong trường hợp điều đó là không thể thực hiện được, nhóm học sinh này muốn tìm cách chọn N đôi giầy trong số M đôi giầy của hiệu giầy và phân bố cho các thành viên của nhóm sao cho t[r]
(1)Bài tập ôn-HSG cấp tỉnh Phú Yên 2008-2009
Bài 1:Một sinh viên quản lí bao gồm thông tin sau: + Họ tên sinh viên (Chuỗi có độ dài tối đa 30 kí tự)
+ Mã số sinh viên (Chuỗi gồm chữ số ************X)
+ Ngày tháng năm sinh (Chuỗi ngày tháng năm theo định dạng DD/MM/YYYY) + Điểm trung bình (Số thực với chữ số phần thập phân X.XX)
Viết chương trình:
+ Đọc thơng tin lớp, bao gồm n sinh viên từ tập tin SINHVIEN.txt
+ Cho phép người dùng chọn loại xếp (sắp xếp theo Tên, xếp theo Ngày Tháng Năm Sinh, xếp theo Mã Số Sinh Viên, xếp theo Điểm Trung Bình) ghi lại liệu xếp lên tập tin SAPXEP.txt
Tập tin SINHVIEN.txt tập tin SAPXEP.txt có cấu trúc sau: Dòng chứa số nguyên n số sinh viên có tập tin
Các dịng chứa n sinh viên, sinh viên gồm thông tin: Họ Tên, MSSV, Ngày tháng năm sinh Điểm trung bình
Ví dụ tập tin SINHVIEN.txt
Nguyen Van A 0712177 10/09/1989 8.53
Le Van B 0712178 16/11/1989 8.16
Lưu ý:
+ Thuật toán xếp tuỳ chọn
+ Tất liệu xếp tăng dần
+ Sắp xếp theo Tên khác với xếp theo họ Tên
+ Khi xếp theo ngày tháng năm sinh, giá trị ưu tiên sếp năm, tháng, ngày
DANH SÁCH LIÊN KẾT
Bài 2:Một trường Đại học có số chương trình đào tạo song song Khi trúng tuyển tân sinh viên chọn lựa đăng ký vào chương trình chọn tuỳ theo điều kiện độ ưu tiên chương trình, cụ thể sau:
- Trường có chương trình đặc biệt, có mức độ ưu tiên khác đánh số 1, theo mức độ ưu tiên (1 ưu tiên nhất) Do đó, sinh viên có nguyện vọng trúng tuyển vào chương trình, khơng xét đến chương trình có độ ưu tiên thấp
- Để đạt yêu cầu CT1, sinh viên cần có tổng điểm mơn thi đại học đạt điểm chuẩn T (T giá trị thay đổi theo năm) Các sinh viên đạt chuẩn chọn theo trình tự từ cao đến thấp tổng điểm thi đại học tối đa đủ C1 tiêu
(2)- Để đạt yêu cầu CT3, sinh viên không cần đạt chuẩn ngoại ngữ mà xét tổng điểm thi đại học Các sinh viên chọn theo trình tự từ cao đến thấp tổng điểm thi đại học tối đa đủ C3 tiêu
- Các sinh viên điểm chọn bị loại việc chọn lựa phải đảm bảo chương trình khơng bị vượt tiêu
Yêu cầu:
Sử dụng danh sách liên kết đơn để lưu trữ xử lý để thực chức sau: • Nhập bảng đăng ký từ tập tin dulieu.txt với nội dung file sau:
Mỗi dịng§ thơng tin
Đối với thông tin NN (Ngoại ngữ) đạt chuẩn,§ khơng đạt chuẩn CT1, CT2, CT3 có nguyện vọng nếu§ khơng có nguyện vọng
Đ1,Đ2,Đ3: điểm mơn§ o MSSV
o Họ tên SV o Đ1 SV o Đ2 SV o Đ3 SV o NN SV o CT1 SV o CT2 SV o CT3 SV o MSSV
o Họ tên SV o Đ1 SV o Đ2 SV o Đ3 SV o NN SV o CT1 SV o CT2 SV o CT3 SV o ……… o ……… Ví dụ: dulieu.txt CT071234 Nguyen Van A 9.5
8.5 9.0 1 1
TT070022 Tran Thi B 10
(3)0 … …
• Nhập/thay đổi tham số T, C1, C2, C3
• Xuất file chuongtrinh1.txt danh sách sinh viên chọn vào chương trình theo thứ tự tăng dần mã số sinh viên
• Xuất file chuongtrinh2.txt danh sách sinh viên chọn vào chương trình theo thứ tự tăng dần mã số sinh viên
• Xuất file chuongtrinh3.txt danh sách sinh viên chọn vào chương trình theo thứ tự tăng dần mã số sinh viên
Lưu ý: file xuất có định dạng file dulieu.txt
CÂY CÂN BẰNG
Bài 3:Hãy viết chương trình hỗ trợ thao tác cân bao gồm: Thêm nút
2 Xố nút
3 Tính chiều cao cân
4 Tìm mức nút có giá trị x số nguyên nhập từ bàn phím
5 Cho biết giá trị x (số nguyên) nhập từ bàn phím có tồn khơng? Đếm số nút (sau nhập cây)
7 Đếm số nút (sau nhập cây) Xuất
Bài 4:Cho n số nguyên dương (1<=n<=30000) Hãy xây dựng xâu đơn chứa n số nguyên dương thực thao tác sau:
+ Xóa tất phần tử trùng (giữ lại phần tử số đó, phần tử được)
+ Thêm vào m phần tử
+ Hãy tìm tất số nguyên tố có xâu thay số nguyên tố liền sau (ví dụ: thành 5, thành 7, 13 thành 17)
+ Sắp xếp lại xâu tăng dần theo thuật toán sau: Selection Sort
2 Insertion Sort Interchange Sort
Dữ liệu đọc từ tập tin có cấu trúc sau: - n cho biết số lượng phần tử xâu
- n số nguyên dương danh sách phần tử có xâu - m số lượng phần tử cần thêm
- m số nguyên dương danh sách số cần thêm (nếu có số ngun khơng thêm nữa, chưa có thêm vào cuối)
- x thuật toán cần xếp(1: Selection Sort, 2: Insertion Sort,3: Interchange Sort) Kết lưu vào tập tin có cấu trúc sau:
(4)- k số nguyên dương danh sách phần tử xâu sau thực thao tác
Ví dụ: Input:
5 2 9 11 Output:
6 11 13 Chú ý:
- Tất thao tác thực theo thứ tự nêu - Cách tổ chức thư mục nộp bài: giống trước đây:
MSSV -> MSSV.zip/.rar (MSSV_new1.zip/rar : có update) EXE: chứa FILE EXE sau biên dịch
SOURCE: chứa tồn file có project TRỪ thư mục DEBUG
- Cách đặt tên file project: LN LN ký tự đầu phải MSSV bạn Bài 5:
Cho tập tin văn có chứa n số nguyên (n<=1000) Các số nguyên có số lượng ký số <=1000
Yêu cầu
• Hãy xây dựng danh sách liên kết (bất kỳ loại nào) để lưu trữ số nguyên
• Hãy xếp danh sách liên kết theo thứ tự tăng dần giá trị theo thuật tốn sau: QuickSort MergeSort
Input
• Dòng chứa số nguyên n k cách khoảng trắng tương ứng số lượng phần tử loại thuật tốn xếp Trong k=1 QuickSort, k=2 MergeSort • n dòng dòng chứa số nguyên tương ứng
Output
• n dịng dịng số nguyên xếp tăng dần Ví dụ
Input
11111111111111111111 2222222222222
33333333333333333333 4444444444
5555555555555555 66666
Output 66666 4444444444 2222222222222 5555555555555555 11111111111111111111 33333333333333333333 Bài 6:
(5)Với chữ tượng trưng cho thao tác thêm chữ tương ứng vào Stack hay Queue, dấu * tượng trưng cho thao tác lấy nội dung phần tử khỏi Stack hay Queue
Sau hoàn tất chuỗi thao tác tiến hành lấy tất phần tử lại, cho biết nội dung lấy
File đầu vào có cấu trúc sau:
+Dòng gồm số n cho biết tổng số chuổi file k cho biết sử dụng cấu trúc liệu nào( 1: Stack, 2: Queue)
+n dòng dòng chuổi Chuổi có độ dài tối đa 255 ký tự File đầu có cấu trúc sau:
+Dịng gồm số n cho biết tổng số chuổi file k cho biết sử dụng cấu trúc liệu nào( 1: Stack, 2: Queue)
+n dòng dòng chuổi cho biết nội dung kết Ví dụ:
+ Test1.inp 1
AAA**BCC*D =>File kết 1
DCBA + Test2.inp
AAA**BCC*D =>File kết
BCCD
Bài 7:Cho tập tin văn chứa số nguyên đôi khác (các số nguyên có giá trị nằm khoảng từ -10^7 10^7)
Yêu cầu: Thực bước sau:
1 Đọc số nguyên từ tập tin vào xây dựng nhị phân tìm kiếm tương ứng Hãy liệt kê tất số nguyên tố
3 Hãy xóa tất số phương khỏi
4 Xuất nhị phân cuối theo thứ tự duyệt: NLR, LNR, LRN
Quy định: Ở bước thứ 2, SV yêu cầu "thay thế" có khả sau giá trị bị thay đổi, nhị phân khơng cịn tính chất nhị phân tìm kiếm SV cần phải hiệu chỉnh lại cho phù hợp
Input
_ Dòng chứa số n, cho biết số lượng node (n<=10^6) _ Dòng thứ chứa n số nguyên đôi khác tương ứng
Output
Gồm dòng:
Mỗi dòng tương ứng với thứ tự duyệt nêu đề: NLR, LNR, LRN Bài 2: Truyền tin
Tên file chương trình: TRANSMIT.PAS
(6)chuỗi phát Thật không may, sơ xuất lắp đặt máy thu, có đảo lộn kênh truyền Hậu chuỗi nhận máy thu lại hoán vị chuỗi ban đầu Trong hồn cảnh tại, cần phải sử dụng gấp thiết bị truyền tin phục vụ cho công việc, thời gian lại không cho phép để sửa chữa thay thế, nên tổ kỹ thuật buộc phải tìm cách phát hốn chuyển kênh xảy để khôi phục thông điệp gửi Rất may, lắp đặt, người ta thử phát M chuỗi ghi lại M chuỗi tương ứng nhận máy thu
Yêu cầu: Là chuyên viên tin học, bạn viết chương trình giúp tổ kỹ thuật tương ứng bit chuỗi phát chuỗi nhận nơi máy thu Điều nghĩa là, dựa M cặp chuỗi phát thu tương ứng, bạn phải hoán vị a1, a2,…, aN, cho biết bit thứ thông điệp gửi chuyển thành bit thứ i thông điệp nhận
Dữ liệu: Dữ liệu vào cho file văn có tên TRANSMIT.INP có cấu trúc sau:
Dòng đầu chứa số nguyên N, M (1 < N ≤ 100, < M ≤ 10000) cách dấu cách cho biết số lượng bit thông điệp số lượng thơng điệp phát thử
Mỗi dịng M dòng chứa hai chuỗi bit Mỗi chuỗi dãy liên tiếp N số Hai chuỗi cách dấu cách Chuỗi đầu chuỗi phát chuỗi thứ hai chuỗi tương ứng nhận máy thu
Kết quả: Kết ghi file văn có tên TRANSMIT.OUT với dịng có nội dung sau:
Nếu với M cặp thơng điệp cho xác định hoán vị a1, a2, …, aN file kết chứa N số nguyên cho biết hoán vị Các số dòng cách dấu cách,
Ngược lại file kết chứa số -1 Ví dụ:
Bài Thuê giầy
Tên file chương trình: SHOES.PAS
Một hiệu cho thuê giầy sân vận động có M đơi giầy, đơi giầy thứ i có kích thước si, i = 1, 2,…, M Có nhóm gồm N (N ≤ M) bạn học sinh đến hiệu thuê giầy để tập chạy sân vận động Học sinh j muốn thuê đơi giầy có kích thước hj, j=1, 2, …, N Mọi việc tốt đẹp bạn học sinh th đơi giầy kích thước mong muốn Trong trường hợp điều khơng thể thực được, nhóm học sinh muốn tìm cách chọn N đôi giầy số M đôi giầy hiệu giầy phân bố cho thành viên nhóm cho tổng giá trị tuyệt đối chênh lệch kích thước đơi giầy nhận kích thước đơi giầy muốn th bạn nhóm nhỏ Tổng gọi độ lệch cách thuê giầy Như vậy, học sinh j nhận đôi giầy pj (j= 1, 2, … , N) độ lệch cách thuê giầy là:
Yêu cầu: Hãy giúp nhóm học sinh tìm cách thuê giầy với độ lệch nhỏ Dữ liệu: Vào từ file văn SHOES.INP, đó:
Dịng chứa hai số ngun dương M, N (1 ≤ N ≤ M ≤ 100), Dòng thứ hai chứa số nguyên dương s1, s2, … , sM,
Dòng thứ ba chứa số nguyên dương h1, h2,… , hN Kết quả: Ghi file văn SHOES.OUT, đó: Dịng thứ ghi độ lệch cách th giầy tìm được,
Dịng thứ hai ghi N số nguyên dương, số thứ j số đôi giầy dành cho bạn học sinh j
(7)Ví dụ:
Trong file liệu vào file kết quả, số dịng cách dấu cách
BT thêm:
1 Bài toán (đề thi HSGQG năm học 1999-2000)
Có n cơng nhân n công việc Nếu xếp công nhân i làm việc j phải trả tiền cơng aij Hãy tìm cách xếp người việc cho tiền công lớn cần trả cách xếp việc nhỏ
Thuật giải :Nếu tốn u cầu tìm cách xếp việc cho tổng tiền cơng phải trả nhỏ tốn tìm cặp ghép đầy đủ trọng số cực tiểu Tuy nhiên tìm cách xếp việc cho tiền công lớn nhỏ Ta có ý tưởng sau: tìm số k bé cho tồn cách xếp đủ n người, n việc yêu cầu tiền cơng ≤ k
Dễ thấy việc tìm kiếm thực kĩ thuật tìm kiếm nhị phân, việc kiểm tra số k có thoả mãn khơng việc kiểm tra đồ thị phía G(k) có ghép đầy đủ hay khơng Đồ thị đồ thị phía G(k) xác định sau:
G(k) = (X,Y,E) Trong đó: X tập n đỉnh ứng với n công nhân, Y tập n đỉnh ứng với n công việc Với i thuộc X, j thuộc Y aij <= k cho (i,j) thuộc E (2 đỉnh i,j nối với aij <= k)
Nếu k số nhỏ mà G(k) có ghép đầy đủ ghép cách xếp việc cần tìm Ta có số tốn dạng tương tự:
Bài tốn Thời gian hồn thành
Có n cơng nhân n cơng việc Nếu xếp cơng nhân i làm việc j thời gian hồn thành Tij Hãy tìm cách xếp người việc tất cơng việc hồn thành thời gian sớm (các công việc tiến hành song song)
Bài toán Năng suất dây truyền
Dây truyền sản xuất có n vị trí n cơng nhân (đều đánh số từ n) aij suất (số sản phẩm sản xuất đơn vị thời gian) công nhân i làm việc vị trí j Với cách bố trí dây truyền (cơng nhân làm vị trí nào) suất vị trí suất công nhân làm việc vị trí Năng suất chung dây truyền suất vị trí dây truyền Hãy tìm cách bố trí dây truyền để có suất cao
Chú ý: ta phải tìm số k lớn để G(k) có ghép đầy đủ đỉnh i,j nối với aij≥k
2 Bài toán (đề thi HSGQG năm học 1998-1999)
Một đoạn đường quốc lộ có n cửa hàng, pi khoảng cách so với đầu đường Nếu cửa hàng có kho khơng cần phải lấy hàng, ngược lại phải đến lấy hàng cửa hàng có kho gần Hãy chọn k cửa hàng để đặt kho cho quãng đường lấy hàng dài số các cửa hàng lại ngắn
Thuật giải :Bài làm vét cạn (duyệt tổ hợp) Ngồi cịn có phương pháp quy hoạch động Tuy nhiên chúng hồn tồn khơng hiệu n lớn Ta áp dụng kỹ thuật tìm kiếm nhị phân kết hợp tham lam sau
Thủ tục search tìm kiếm nhị phân giá trị d miền dmin dmax tương tự toán Riêng thủ tục check(d) thực khác Thay kiểm tra xem bố trí k kho cho quãng đường lấy hàng cửa hàng khơng có kho ≤d khơng, ta làm ngược lại: bố trí kho cho quãng đường lấy hàng cửa hàng không vượt d Cách làm sau:
(8)Dùng cửa hàng giả có số t = n+1 làm biên cho di0 = dit = ∞ với i Đặt kho (giả) cửa hàng
Với cửa hàng i từ đến n: i có kho chuyển sang cửa hàng tiếp theo, ngược lại thì:
1 Tìm cửa hàng x có kho gần i phía bên trái (x thuộc i) Tìm cửa hàng y có kho gần i phía bên phải (y thuộc i t)
Nếu dix diy ≤ d quãng đường lấy hàng i ≤ d (thoả mãn) Ngược lại tìm cửa hàng j chưa có kho xa i phía phải (j thuộc i y) mà dij ≤ d Đặt kho j
Sau trình đếm số kho (tất nhiên khơng tính kho t) Nếu số kho ≤ k đặt Ok true
3 Bài toán (đề thi Olympic Tin học SV 2004)
Có N hành khách, M khách sạn K xe bus Mỗi hành khách cần khách sạn xe bus qua số khách sạn Xe bus i có q[i] chỗ ngồi Hãy xếp hành khách lên xe bus cho:
1 Mỗi xe bus khơng chứa nhiều hành khách số ghế
2 Tất hành khách lên xe bus có qua khách sạn cần đến Số xe bus cần dùng
Thuật giải
Bài có thuật giải áp dụng kĩ thuật tìm kiếm nhị phân sau: ta tìm số T nhỏ cho: dùng T xe bus chở hết khách thoả mãn điều kiện
T tìm phương pháp nhị phân miền từ đến K Để kiểm tra giá trị T có thoả mãn khơng, ta tìm tổ hợp T xe bus số K xe bus cho xếp N hành khách lên T xe bus thoả mãn điều kiện
Ta chọn T xe bus phương pháp duyệt tổ hợp kiểm tra tổ hợp có có thoả mãn khơng thuật tốn cặp ghép (hoặc luồng đồ thị phía) Thuật tốn luồng thực thi nhanh hơn, mô tả sau:
1 Xây dựng đồ thị phía G(X,Y,E) Trong đó: X khách sạn, Y xe bus chọn (T xe bus) Khả thông qua đỉnh thuộc X số hành khách đến khách sạn Khả thơng qua đỉnh thuộc Y số chỗ ngồi xe bus Nếu xe bus j qua khách sạn i đặt khả thông qua cạnh (i,j) N, ngược lại đặt
2 Tìm luồng cực đại đồ thị G Nếu giá trị luồng qua đỉnh X khả thông qua việc lựa chọn tổ hợp T xe bus thoả mãn yêu cầu Từ giá trị luồng ta dễ dàng tìm cách xếp hành khách
Nếu bạn khơng quen với thuật tốn luồng cài thuật tốn cặp ghép:
1 Xây dựng đồ thị phía G(X,Y,E) Trong đó: X hành khách, Y chỗ ngồi xe bus chọn (có T xe bus chọn, xe t có q[t] chỗ ta sinh q[t] đỉnh Y) Nếu xe bus tương ứng j qua khách sạn i đưa cạnh (i,j) vào E
2 Tìm ghép đầy đủ đồ thị G Nếu có việc lựa chọn tổ hợp T xe bus thoả mãn u cầu ghép cách xếp hành khách
Ta rút số nhận xét sau:
1 Việc tìm kiếm nhị phân làm giảm số tổ hợp phải duyệt nhiều Nếu vét cạn tuý phải duyệt tối đa 2K tổ hợp Tuy nhiên dùng phương pháp tìm kiếm nhị phân, duyệt xong giá trị T ta khơng cần phải kiểm tra tổ hợp nhiều T phần tử (nếu T thoả mãn) T phần tử (nếu T không thoả mãn)
(9)đi qua nhiều khách sạn, không xét xe bus không qua khách sạn số khách sạn có hành khách cần đến…
3 Cần giảm miền tìm kiếm kmin…kmax xuống nhiều tốt (kết hợp với phương pháp tham lam chẳng hạn) Mặt khác ghi nhận lại giá trị T xét để tránh phải xét lại cách vơ ích
Ta có tốn giải kĩ thuật tương tự: Bài tốn Mạng máy tính
Mạng gồm N máy tính, số cặp máy nối với cáp Có chương trình điều khiển, máy cài đặt chương trình điều khiển tất máy khác có cáp nối trực tiếp với (tất nhiên điều khiển nó) Cần chọn số máy để cài chương trình tất máy điều khiển
Thuật giải
Bài giải cách duyệt tất tổ hợp Tuy nhiên áp dụng phương pháp tìm kiếm nhị phân giúp giảm số tổ hợp cần duyệt nhiều (lập luận 5) Bạn đọc cài theo phương pháp để so sánh
Bài 1:Đóng gói sản phẩm Tên chương trình zxy.???
Ở đầu dây chuyền sản xuất nhà máy ZXY có máy xếp tự động Sau kết thúc việc gia công dây chuyền, sản phẩm xếp vào hộp có dung lượng M Sản phẩm rời khỏi dây chuyền xếp vào hộp mở (khi bắt đầu ca làm việc có hộp rỗng mở sẵn) dung lượng hộp đủ để chứa sản phẩm Trong trường hợp ngược lại, máy tự động đóng nắp hộp tại, cho xuất xưởng mở hộp rỗng để xếp sản phẩm vào Trong ca làm việc có n sản phẩm đánh số từ đến n theo thứ tự mà chúng rời khỏi dây chuyền Sản phẩm thứ i có trọng lượng ai, i = 1,2,,n Ban Giám đốc nhà máy quy định sản phẩm xuất xưởng ca làm việc phải xếp vào không k hộp
Yêu cầu:Hãy giúp người quản đốc ca làm việc xác định giá trị M nhỏ cho số hộp mà máy tự động cần sử dụng để xếp dãy n sản phẩm xuất xưởng ca không vượt số k cho trước
Dữ liệu:Vào từ file văn ZXY.INP:
- Dòng chứa hai số nguyên n k, (1≤k≤n≤15000);
- Dòng thứ i n dòng chứa số nguyên dương (ai≤30000), i =1,2,,n Các số dòng cách dấu cách
Kết quả: