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

2021-09-28 19:28:40 字數 1031 閱讀 6027

題目描述

有n個函式,分別為f1,f2,…,fn。定義fi(x)=aix^2+bix+ci (x∈n*)。給定這些ai、bi和ci,請求出所有函式的所有函式值中最小的m個(如有重複的要輸出多個)。

輸入格式

輸入資料:第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai、bi和ci。ai<=10,bi<=100,ci<=10 000。

輸出格式

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

思路:優先佇列,把n

nn個函式的初始狀態(x=1

x=1x=

1)都放進去,然後取值最小的令x+1

x+1x+

1再放入即可。(因為a、b

a、ba、

b都是》=0

>=0

>=0

的,所以函式都是單調增的)

#include

#define inf 0x3f3f3f3f

#define eps 1e-8

#define pr pair

using

namespace std;

typedef

long

long ll;

struct node

node

(int aa,

int bb,

int cc,

int xx=1)

bool

operator

<

(const node&a)

const

}ans[

10005];

int n,m;

intmain()

int cnt=0;

while

(cntfor(

int i=

0;i)printf

("%d "

,ans[i]

.v);

return0;

}

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

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

洛谷 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...