模板 三分法

2022-02-27 07:00:16 字數 1181 閱讀 7200

如題,給出乙個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 i

using 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的值。四...