題目大意:有n個函式,分別為f1,f2,...,fn。定義fi(x)=ai*x^2+bi*x+ci (x∈n*)。給定這些ai、bi和ci,要求出所有函式的所有函式值中最小的m個(如有重複的要輸出多個)。
解題思路:因為$n,m\leq 10000$,暴力列舉肯定是不可取的。我們發現,fi(x)一定不會大於fi(x+1),那麼我們可以把所有fi(1)放進乙個小根堆裡,每次取出乙個fi(x),就把fi(x+1)放進去,這樣就能保證答案從小到大。時間複雜度為$o(m\log n)$。
c++ code:
#include#includeusing namespace __gnu_pbds;struct heapnode
};priority_queueq;
int n,m,a[10005],b[10005],c[10005];
int main());
} bool space=false;
while(m--)
puts("");
return 0;
}
洛谷 P2085 最小函式值
有n個函式,分別為f1,f2,fn。定義fi x ai x 2 bi x ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入格式 輸入資料 第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。ai 10...
P2085 最小函式值 洛谷
有n個函式,分別為f1,f2,fn。定義fi x ai x 2 bi x ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入格式 輸入資料 第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。ai 10...
洛谷 P2085 最小函式值
我們建乙個大根堆,存最小的數到第m小的數,第m小的數就理所當然的是堆頂了。每次我們只需要比較新加進來的數比堆頂大還是比堆頂小,如果比堆頂小,將原來的堆頂丟掉,將新的數塞進去 如若比堆頂大,根據該題題意,a 0 b 0,函式對稱軸x b 2 a恆小於0,可以得出,y在x 0時是單調遞增的 所以接下來的...