ex.dpr

来自「tongji acm-online judge solution」· DPR 代码 · 共 120 行

DPR
120
字号
{
	Greedy: from last day to first day
}
program Ural_1403(Input,Output);
const
	MaxN=1000;
type
	TIndex=Longint;
	TOrder=record
		Time,Money,Index:TIndex;
	end;
	TOrderSet=array[0..MaxN]of TOrder;
	TList=array[1..MaxN]of TIndex;
	THeap=array[1..MaxN]of TIndex;
var
	N:TIndex;
	Order:TOrderSet;
	Num:TIndex;
	List:TList;
	Size:TIndex;
	Heap:THeap;
function Compare(x,y:TIndex):TIndex;
begin
	Result:=Order[x].Money-Order[y].Money;
end;
procedure Heap_Push(x:TIndex);
var
	i:TIndex;
begin
	Inc(Size);
	i:=Size;
	while (i>1) and (Compare(x,Heap[i div 2])>0) do
	begin
		Heap[i]:=Heap[i div 2];
		i:=i div 2;
	end;
	Heap[i]:=x;
end;
function Heap_Pop:TIndex;
var
	x:TIndex;
	i,j:TIndex;
begin
	Result:=Heap[1];
	x:=Heap[Size];
	Dec(Size);
	i:=1;
	j:=2;
	while (j<=Size) do
	begin
		if (j+1<=Size) and (Compare(Heap[j],Heap[j+1])<0) then Inc(j);
		if Compare(x,Heap[j])>=0 then Break;
		Heap[i]:=Heap[j];
		i:=j;
		j:=i*2;
	end;
	Heap[i]:=x;
end;
procedure QuickSort(l,r:TIndex);
var
	i,j:TIndex;
	Mid,Tmp:TOrder;
begin
	i:=l;
	j:=r;
	Mid:=Order[(i+j) div 2];
	repeat
		while Order[i].Time<Mid.Time do Inc(i);
		while Order[j].Time>Mid.Time do Dec(j);
		if i<=j then
		begin
			Tmp:=Order[i];
			Order[i]:=Order[j];
			Order[j]:=Tmp;
			Inc(i);
			Dec(j);
		end;
	until i>j;
	if l<j then QuickSort(l,j);
	if i<r then QuickSort(i,r);
end;
procedure Main;
var
	i:TIndex;
	CurTime,Times:TIndex;
begin
	Readln(N);
	for i:=1 to N do
	begin
		Readln(Order[i].Time,Order[i].Money);
		Order[i].Index:=i;
	end;
	QuickSort(1,N);

	Num:=0;
	Size:=0;
	Order[0].Time:=0;
	i:=N;
	repeat
		CurTime:=Order[i].Time;
		repeat
			Heap_Push(i);
			Dec(i);
		until Order[i].Time<CurTime;
		Times:=CurTime-Order[i].Time;
		repeat
			Dec(Times);
			Inc(Num);
			List[Num]:=Order[Heap_Pop].Index;
		until (Size=0) or (Times=0);
	until i=0;

	Writeln(Num);
	for i:=Num downto 1 do
		Write(List[i],' ');
	Writeln;
end;
begin
	Main;
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?