Thứ Hai, 16 tháng 12, 2013

Đoạn rời 2



Cho N đoạn thẳng với các điểm đầu ai và điểm cuối bi là những số nguyên trong khoảng-1000..1000, ai < bi. Liệt kê số lượng tối đa các đoạn thẳng rời nhau. Hai đoạn được xem là rời nhau nếu chúng không có điểm chung. Các đoạn có dạng như trong bài Phủ đoạn 2.

DOAN.INP
DOAN.OUT

Dữ liệu vào: tệp văn bản DOAN.INP
Dòng đầu tiên: số tự nhiên N > 1.
Từ dòng thứ hai: liệt kê các đoạn, mỗi dòng có thể chứa nhiều đoạn, mỗi đoạn được ghi trọn trên một dòng.
Dữ liệu ra: tệp văn bản DOAN.OUT
Dòng đầu tiên: số  K.
Tiếp theo là K số tự nhiên biểu thị chỉ số của các đoạn thẳng rời nhau.

8
( -2, 3) [3 , 5) [8, 12] [13 ,15 )
(1 , 9 ) ( 2, 5 ]  [5 ,8 )  [7, 15]



5
1 2 7 3 4



Kết quả trên cho biết có tối đa 5 đoạn rời nhau là 1, 2, 7, 3 và 4.

Thuật toán

Phương pháp: Tham.
Trước hết ta chỉnh lại các đầu hở giống như bài trước sau đó áp dụng thuật toán của bài đoạn rời.
Các điểm đầu và cuối đoạn và các biến liên quan được khai báo kiểu số thực.
Độ phức tạp: N.logN  chi phí cho quick sort.
(*   Pascal   *)
(*========================================
   liet ke toi da cac doan thang roi nhau           
  =========================================*)
program DoanRoi2;
uses crt;
Tổ chức dữ liệu: xem bài Phủ đoạn 2
function DocSo: xem bai Phu doan 2;
procedure DocDoan: xem bai Phu doan 2;
procedure Doc: xem bai Phu doan 2;
procedure Qsort(l,r: integer): xem bai Phu doan 2;
procedure XuLi : xem bai Doan roi 1;
procedure Ket: xem bai Doan roi 1 ;
BEGIN
  Doc;   Qsort(1,n);
  XuLi;  Ket;
END.


Nguồn:

SÁNG TẠO
TRONG THUẬT TOÁN
LẬP TRÌNH

Không có nhận xét nào:

Đăng nhận xét