有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 104 5 3
3 4 5
1 7 1
輸出樣例#1:
9 12 12 19 25 29 31 44 45 54
說明資料規模:n,m<=10000
解析:思路很簡單,跟那道p1631 序列合併基本上乙個思路,我們可以把每個函式看成乙個單調遞增序列,用堆實現和這題相似的做法。
相當於乙個動態的比較問題吧,所以用堆更好實現,所以實際上沒有分支問題,比p1631 序列合併這道題簡單。
然而我還是不會用stl,借鑑了一下題解。。。
#include#include#include
#include
#include
#include
#include
#define n 10010
using
namespace
std;
intn,m;
struct
funf[n];
struct
valuer[n];
priority_queue
,greater>q;
bool
operator>(value a,value b)
int func(int a,int b,int c,int x)
void
solve()
);
for(int i=1;i<=m;i++));}
}int
main()
2019-05-20 20:30:02
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 個扔進去,然後在整個佇列裡面...