時空限制 1000ms/128mb
有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
法一:手動堆
#include#includeusing namespace std;
const int n = 10005;
int n,m,ans[n];
struct nodef[n];
int find(int a,int b,int c,int x)
void adjust(int i,int m)
else break; }}
int main()
for (int i=n/2; i>=1; i--) adjust(i,n); //構建小頂堆
for (int i=1; i<=m; i++)
for (int i=1; i<=m; i++)
i法二:列舉
#includeusing namespace std;
const int n = 10005, oo = 0x3fffffff;
int n,m,a[n],b[n],c[n],f[n],ans[n];
int find(int a,int b,int c,int x)
int main()
for (int i=1; i<=m; i++)
f[k]++; //x++
} for (int i=1; i<=m; i++)
ireturn 0;
}
luogu2085 最小函式值
有n個函式,分別為f1,f2,fn。定義fi x ai x 2 bi x ci x,ai,bi,ci n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個。審題!a i,b i 0 這說明對稱軸在y軸左側!所以正半軸上x值是單調遞增的!這樣我們就可以想到用單調佇列來解決這個問題了。i...
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...
LGOJ P2085 最小函式值
p2085 最小函式值 用 now i 記錄使得當前狀態下 f i x 取得最小值的自變數的值。初始化 初始狀態,我們有 n 個二次函式 f x a ix 2 b ix c i,x in mathbb 對稱軸 frac in infty 1 則 now i 1 對稱軸 frac in 1,infty...