Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCMARA/
1. Đề bài BCMARA spoj PTIT
John cho các con bò của mình chạy đua marathon! Thời gian bò N (1 <= N <= 5,000) về đích được biểu diễn theo dạng Số giờ (0 <= Số giờ <= 99), Số phút (0 <= Số phút <= 59), và số giây (0 <= Số giây <= 59). Để xác định nhà vô địch, John phải sắp xếp các thời gian (theo số giờ, số phút, và số giây) theo thứ tự tăng dần, thời gian ít nhất xếp đầu tiên.
Ví dụ: Với 3 thời gian như sau:
11:20:20
11:15:12
14:20:14
Kết quả sau khi sắp xếp là:
11:15:12
11:20:20
14:20:14
INPUT FORMAT:
* Line 1: 1 số nguyên: N
* Lines 2..N+1: Dòng i+1 chứa thời gian bò i được mô tả bởi 3 số nguyên cách bởi dấu cách : Số Giờ , Số Phút, Số giây.
OUTPUT FORMAT:
* Dòng 1..N: Mỗi dòng chứa thời gian của 1 con bò là 3 số nguyên cách nhau bởi dấu cách sau khi đã sắp xếp.
SAMPLE INPUT:
3
11 20 20
11 15 12
14 20 14
SAMPLE OUTPUT:
11 15 12
11 20 20
14 20 14
Gợi ý: đổi giờ phút sang giây và dùng thuật toán sắp xếp Quicksort để sắp xếp, sau đó xuất ra kết quả.
2. code tham khảo BCMARA spoj PTIT
const fi=''; nmax=5500; type data=longint; dulieu=record h,p,s,sum:data; end; var A:array[0..nmax] of dulieu; n:data; f:text; procedure docfile; var i,j:data; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do begin readln(f,a[i].h,a[i].p,a[i].s); a[i].sum:=a[i].h*3600+a[i].p*60+a[i].s; end; close(f); end; procedure sort(l,r: longint); var i,j,x: longint; y:dulieu; begin i:=l; j:=r; x:=a[(l+r) div 2].sum; repeat while a[i].sum<x do inc(i); while x<a[j].sum do dec(j); if not(i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); j:=j-1; end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; procedure xuli; var i:data; begin for i:=1 to n do writeln(a[i].h,' ',a[i].p,' ',a[i].s); end; begin docfile; sort(1,n); xuli; end.