[uva error curves]一些二次函式取max的交集還是乙個下凸函式。三分即可
#include #define maxn 10010using namespace std;
int n, a[maxn], b[maxn], c[maxn];
#define f(i, x) a[i] * x * x + b[i] * x + c[i]
inline double cal(double x)
inline void solve()
printf("%.4lf\n", cal(l));
}int main()
return 0;
}
[zoj light bulb]列出數學式子,是乙個對勾函式(可以直接解),或者三分,注意影子到地上的判斷,不過d-x≤h??
#include using namespace std;double h, h, d, p, q;
inline double check(double x)
void solve()
printf("%.3lf\n", check(r));
}int main()
return 0;
}
[hdu line belt]三分再三分
#include using namespace std;struct point
}a, b, c, d;
#define sqr(x) (x)*(x)
double len(const point& a, const point& b)
int p, q, r;
double t(double a, double b)
double check(double a)return t(a, r);
}int main()
printf("%.2lf\n", check(r));
} return 0;
}
[poj 3301]texas trip
如果平行於座標軸的正方形很好計算
如何計算歪的正方形嘞??
旋轉角度嘛。乙個關於旋轉角度的下凸函式
然後三分角度qaq orz神
#include #include #include #define maxn 100using namespace std;
int n;
struct pointa[maxn], b[maxn];
#define sqr(x) x * x
double check()
return sqr(max(rg - lf, up - dw));
}const double pi = acos(-1.0);
double mdf(double x)
return check();
}void solve()
printf("%.2lf\n", mdf(l));
}int main()
return 0;
}
[codeforces 605c]
首先這是乙個線性規劃問題,有100000個變元,2個約束條件。0並不是乙個初始解,所以對偶一下,100000個約束條件,2個變元。發現並不能線性規劃單純形,考慮一些半平面的交是上凸函式,所以確定y1可以找出y2的值,所以可以三分啦(然而標解是二分+凸包)
#include #define maxn 100010using namespace std;
int n, p, q;
int a[maxn], b[maxn];
double check(double y)
int main()
double l = 0, r = 1.0 / x;
for(int i = 1; i <= 300; i ++)
printf("%.12lf\n", check(l));
return 0;
}
[sdoi 2013]保護出題人
#include #define maxn 100010using namespace std;
typedef long long ll;
ll n, d;
ll a[maxn], x[maxn];
/*每一關的獨立性。
攻擊力 = max((sum[i] - sum[j-1]) / (xi + (i - j) * d))
*/ll sum[maxn];
struct point
};double operator * (const point& a, const point& b)
point st[maxn];
point operator - (const point &a, const point &b)
int top;
int i;
double check(int p)
int main()
int mx = l;
for(int j = l + 1; j <= r; j ++)
if(check(j) > check(mx))
mx = j;
l = mx;
ans += (double)(sum[i] - st[l].y) / (x[i] + i * d - st[l].x);
}printf("%.0lf\n", ans);
return 0;}/*
input
5 23 3
1 110 8
4 82 3
output
7 1≤n≤10^5,1≤d≤10^12,1≤x≤10^12,1≤a≤10^12
*/
三分法(洛谷3382 模板 三分法)
如題,給出乙個n次函式,保證在範圍 l,r 內存在一點x,使得 l,x 上單調增,x,r 上單調減。試求出x的值。輸入格式 第一行一次包含乙個正整數n和兩個實數l r,含義如題目描述所示。第二行包含n 1個實數,從高到低依次表示該n次函式各項的係數。輸出格式 輸出為一行,包含乙個實數,即為x的值。四...
三分法小結
二分法作為分治中最常見的方法,適用於單調函式,逼近求解某點的值。但當函式是凸性函式時,二分法就無法適用,這時三分法就可以 大顯身手 如圖,類似二分的定義left和right,mid left right 2,midmid mid right 2 如果mid靠近極值點,則right midmid 否則...
三分法查詢
我們都知道 二分查詢 適用於單調函式中逼近求解某點的值。如果遇到凸性或凹形函式時,可以用三分查詢求那個凸點或凹點。下面的方法應該是三分查詢的乙個變形。如圖所示,已知左右端點l r,要求找到白點的位置。思路 通過不斷縮小 l,r 的範圍,無限逼近白點。做法 先取 l,r 的中點 mid,再取 mid,...