題解 P2085 最小函式值

2022-05-02 04:18:06 字數 1257 閱讀 7649

有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個數應該輸出到一行,用空格隔開。

輸入樣例#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

stl就是用的優先佇列。

對於乙個函式 \(f(x) = a x ^ + b x + c\),我們會發現對稱軸為\(x = -\frac\),所以函式\(f(x)\)在\([1, +∞)\),根據題意\(x ∈n^\),可知對於每個函式\(f(x)\)都是單調遞增的。

所以我們就可以對於每個函式,先取\(x = 1\),然後再當從堆中取出這個函式的\(x = 1\)時,把\(x = 2\)扔進堆中,,,

然而,此題資料正如第一篇題解體現的那樣,資料

所以,我們可以為所欲為!

我直接把所有函式的前10個值放進去,wa * 9

然後,我把函式的前100個值放進去,ac……

#include#include#include#include#includeusing namespace std;

#define go(i, j, n, k) for(int i = j; i <= n; i += k)

inline int read()

while(ch >= '0' && ch <= '9')

return x * f;

}#define abc a[i], b[i], c[i]

int a[mn], b[mn], c[mn];

inline int get_f(int x, int a, int b, int c)

priority_queueq;

int n, m;

int main()

go(i, 1, n, 1)

} go(i, 1, m, 1)

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 個二次函式,給你 a b c 不過仔細的話可以發現 這三個係數都是正整數!所以意味著二次函式的對稱軸在x軸負半軸,在我們考慮的 1,infty 中的整數區間都是單調遞增的。所以同乙個函式中,x 1 時的函式值是最小的。如何求目標值?下面給出演算法。對於每個函式,是不是有乙個單調答案序列...

P2085 最小函式值

題目鏈結hhh 好嘛,運氣真好,剛a掉序列合併,正好碰到這題,可以說是序列合併的公升級版了 那麼簡單說一下思路,首先,最小值肯定出在當x 1的情況下的n個值中,那麼將x 1的情況全部扔進小根堆裡並用結構體確定最小值的下標,那麼在呼叫此下標時,x就要加一,並出堆,實現 如下 1 include2 in...