Đề bài: http://vn.spoj.com/problems/MOVE12/
Thuật toán:
- Chặt nhị phân thời gian gặp nhau
- Kiểm tra có thỏa mãn không (sử dụng heap). Bạn có thể đọc cdoe bên dưới sẽ hiểu hơn.
Code:
const
tfi='';//move12.inp';
tfo='';//move12.out';
var
fi,fo:text;
n,nh:longint;
a,b,h,pos,c,t,v:array[0..10000]of longint;
procedure nhap;
var i:longint;
begin
read(fi,n);
for i:=1 to n do read(fi,c[i],t[i]);
end;
procedure swap(var x,y:longint);
var tg:longint;
begin
tg:=x;
x:=y;
y:=tg;
end;
procedure upheap(i:longint);
var j:longint;
begin
j:=i div 2;
if (i>1) and (b[h[i]]nh) then exit;
if (jkey do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
inc(i);
dec(j);
end;
until i>j;
if i0 then u:=pop else u:=0;
if b[u]
Recent Comments