P2085最小函式值(優先佇列)

2022-04-06 04:32:40 字數 998 閱讀 9972

有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,bi<=100,ci<=10 000。

輸出格式:

輸出資料:輸出將這n個函式所有可以生成的函式值排序後的前m個元素。這m個數應該輸出到一行,用空格隔開。

輸入樣例#1:

3 10

4 5 3

3 4 5

1 7 1

輸出樣例#1:

9 12 12 19 25 29 31 44 45 54
資料規模:n,m<=10000

/*

用乙個優先佇列q儲存當前最小的m個函式值。

因為a,b,c>0,所以f(x)為增函式。

所以這m個值一定在x=1,2,3...m中取得。

首先把第乙個函式的前m個值壓入佇列中。

對於第2、3、4……n個函式,每次將x遍歷1到m。

如果f(x)大於等於堆頂,那麼x及x以後的函式值都比這m個大

可以不用計算了直接break掉。

否則,彈出堆頂,將f(x)壓入佇列。

*/#include

#include

using

namespace

std;

priority_queue

q;int ans[10005

],n,m,a,b,c,x;

intmain()

}for(int i=m;i;--i)ans[i]=q.top(),q.pop();

for(int i=1;i<=m;++i)printf("

%d "

,ans[i]);

return0;

}

心若向陽,無言悲傷

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 aix 2 bix ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入格式 輸入資料 第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。ai...

洛谷P2085 最小函式值(優先佇列)

給定 n 個二次函式 f x ax 2 bx c 保證 a,b,c,x 均為正整數且 a leq10,b leq100,c leq10000 請輸出前 m 大的函式值。有點難說,直接上題目鏈結吧 顯然,f x 是單調遞增函式,肯定要用到堆 優先佇列 直接每個函式把前 m 個扔進去,然後在整個佇列裡面...