最优解情况下每个分量的导数相同,二分这个导数即可。
#include <lastweapon/io>
using namespace lastweapon;
const int N = int(1e4) + 9;
int n;
double e, s[N], k[N], u[N];
double calcV(double x, int i) {
double l = 0, r = INF, mid;
int cnt = 233;
while(cnt--) {
mid = (l+r)/2;
if(2*k[i]*s[i]*mid*mid*(mid-u[i])*x > -s[i]) l = mid ;else r = mid;
}
return (l+r)/2;
}
double calcE(double x) {
double res = 0;
REP(i, n) {
double v = calcV(x, i);
res += k[i]*(v-u[i])*(v-u[i])*s[i];
}
return res;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
RD(n);
RF(e);
REP(i, n) RF(s[i], k[i], u[i]);
double l = -INF, r = 0, mid;
DO(100){
mid = (l+r)/2;
if(calcE(mid) <= e) l = mid ;else r = mid;
}
mid = (l+r)/2;
double ans = 0;
REP(i, n) ans += s[i] / calcV(mid, i);
printf("%.6lf", ans);
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
