最小函式值

2021-07-25 09:19:19 字數 1671 閱讀 1763

給n個函式。fi(x)=ai*x^2+bi*x+ci 。給定這些ai、bi和ci,請求出所有函式的所有函式值中最小的m個。3 10

4 5 3

3 4 5

1 7 1

9 12 12 19 25 29 31 44 45 54

維護乙個小根堆,裡面的值為,按照要求每次輸出堆頂,並將堆頂函式中的x加1再下調整個堆,直到輸出m次堆頂。

var

p,x,i,n,m,k,f,zz,tot:longint;

heap,a,b,c,w,s:array[0..40000]of longint;

procedure

swap

(var a,b:longint);

var t:longint;

begin

t:=a;a:=b;b:=t;

end;

procedure

up(x:longint);

begin

while(heap[x]div

2])and(x>1)do

begin

swap(heap[x],heap[x div

2]);

swap(w[x],w[x div

2]);

swap(s[x],s[x div

2]);

x:=x div

2; end;

end;

procedure

down

(x:longint);

begin

swap(heap[x],heap[n]);

swap(w[x],w[n]);

swap(s[x],s[n]);

dec(n);

while x*2

<=n do

begin

x:=x*2;

if(heap[x+1]and(x+1

<=n)then inc(x);

if heap[x]div

2] then

begin

swap(heap[x],heap[x div

2]);

swap(w[x],w[x div

2]);

swap(s[x],s[x div

2]);

endelse

exit;

end;

end;

begin

read(m,k);

for i:=1

to m do

begin

read(a[i],b[i],c[i]);

inc(n);

heap[n]:=a[i]+b[i]+c[i];

w[n]:=i;

s[n]:=1;

up(n);

end;

repeat

write(heap[1],' ');

f:=w[1];

zz:=s[1];

down(1);

inc(zz);

inc(n);

heap[n]:=a[f]*sqr(zz)+b[f]*zz+c[f];

w[n]:=f;

s[n]:=zz;

up(n);

inc(tot);

until tot=k;

end.

最小函式值

最小函式值 time limit 1000ms memory limit 65536k total submit 121 accepted 54 description 問題描述 有n個函式,分別為f1,f2,fn。定義fi x ai x 2 bi x ci x n 給定這些ai bi和ci,請求出...

最小函式值

題目描述 有n個函式,分別為f1,f2,fn。定義fi x aix 2 bix ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入格式 輸入資料 第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。ai...

最小函式值

題目描述 有 n 個函式,分別為 f1,f2,fn。定義 fi x ai x 2 bi x ci x n 給定這些ai bi 和 ci,請求出所有函式的所有函式值中最小的 m 個 如有重複的要輸出多個 輸入 第一行輸入兩個正整數 n 和 m。以下 n 行每行三個正整數,其中第ii行的三個數分別位 a...