如題,給出乙個n次函式,保證在範圍[l,r]內存在一點x,使得[l,x]上單調增,[x,r]上單調減。試求出x的值。
輸入格式:
第一行一次包含乙個正整數n和兩個實數l、r,含義如題目描述所示。
第二行包含n+1個實數,從高到低依次表示該n次函式各項的係數。
輸出格式:
輸出為一行,包含乙個實數,即為x的值。四捨五入保留5位小數。
時空限制:50ms,128m
資料規模:
對於100%的資料:7<=n<=13
這是一道三分的模板題,在這裡我講一下三分
三分是一種優化的暴力,從他的名字就可以知道,這是一種很類似於二分的方法,通過一系列操作時複雜度由o(n)降到o(logn)
求單峰多次函式最值位置(近似值)
我們先看一幅圖(picture by luogu)
現在我們的已知條件有峰所在的區間和函式表示式,這就很好辦
首先我們取區間中點
然後取離中點很近的兩個點(距離必須小於等於要求精度),並求出它們的函式值
這時候通過判斷函式值的大小就可以知道此處是遞增還是遞減
如果遞增,那點就在左區間,峰在其右,區間左端點就變成區間中點
反之亦然
一直縮小區間大小
到滿足精度時,答案就呼之欲出
高中的同學應該都知道有個東西叫秦九韶演算法
它可以將a0+a1*x^1+a2*x^2……an^xn這個高複雜度的東西
優化為an(x+an-1(x……a1(x+a0)))這個線性的式子
複雜度下降了乙個log
很好使
#include#include#include#define rii register int iusing namespace std;
int n;
double xs[15],l,r,final,mid;
double eps=0.000001;
double dxs(double z)
return ans;
}int main()
eps=0.000001;
while(1)
else
}printf("%.5lf",final);
}
模板 三分法
題目鏈結 如題,給出乙個 n 次函式,保證在範圍 l,r 內存在一點 x,使得 l,x 上單調增,x,r 上單調減。試求出 x 的值。第一行一次包含乙個正整數 n 和兩個實數 l,r,含義如題目描述所示。第二行包含 n 1 個實數,從高到低依次表示該 n 次函式各項的係數。輸出為一行,包含乙個實數,...
模板 三分法
如題,給出乙個n次函式,保證在範圍 l,r 內存在一點x,使得 l,x 上單調增,x,r 上單調減。試求出x的值。輸入格式 第一行一次包含乙個正整數n和兩個實數l r,含義如題目描述所示。第二行包含n 1個實數,從高到低依次表示該n次函式各項的係數。輸出格式 輸出為一行,包含乙個實數,即為x的值。四...
三分法(洛谷3382 模板 三分法)
如題,給出乙個n次函式,保證在範圍 l,r 內存在一點x,使得 l,x 上單調增,x,r 上單調減。試求出x的值。輸入格式 第一行一次包含乙個正整數n和兩個實數l r,含義如題目描述所示。第二行包含n 1個實數,從高到低依次表示該n次函式各項的係數。輸出格式 輸出為一行,包含乙個實數,即為x的值。四...