20240418
This commit is contained in:
59
ACMOJ-2165.cpp
Normal file
59
ACMOJ-2165.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include <algorithm>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
typedef long long LL;
|
||||
typedef long double LDB;
|
||||
const int kMaxN = 1e4 + 10;
|
||||
const LDB kEps = 1e-4;
|
||||
int n, a, b;
|
||||
LDB p[kMaxN], q[kMaxN];
|
||||
LDB calcxy(LDB x, LDB y) {
|
||||
LDB tot = a * x + b * y;
|
||||
for (int i = 1; i <= n; i++)
|
||||
tot += max({LDB(0), p[i] - x, q[i] - y, p[i] + q[i] - p[i] * q[i] - x - y});
|
||||
return tot;
|
||||
}
|
||||
LDB calcx(LDB x) {
|
||||
LDB res=0;
|
||||
LDB left_bound = -1e4, right_bound = 1e4;
|
||||
while (right_bound - left_bound > kEps) {
|
||||
LDB l_mid = (left_bound + left_bound + right_bound) / 3;
|
||||
LDB r_mid = (left_bound + right_bound + right_bound) / 3;
|
||||
LDB l_res = calcxy(x, l_mid);
|
||||
LDB r_res = calcxy(x, r_mid);
|
||||
res = (l_res + r_res) / 2;
|
||||
if (l_res > r_res)
|
||||
left_bound = l_mid;
|
||||
else
|
||||
right_bound = r_mid;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
LDB calc() {
|
||||
LDB res = 0;
|
||||
LDB left_bound = -1e4, right_bound = 1e4;
|
||||
while (right_bound - left_bound > kEps) {
|
||||
LDB l_mid = (left_bound + left_bound + right_bound) / 3;
|
||||
LDB r_mid = (left_bound + right_bound + right_bound) / 3;
|
||||
LDB l_res = calcx(l_mid);
|
||||
LDB r_res = calcx(r_mid);
|
||||
res = (l_res + r_res) / 2;
|
||||
if (l_res > r_res)
|
||||
left_bound = l_mid;
|
||||
else
|
||||
right_bound = r_mid;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
int main() {
|
||||
#ifdef local
|
||||
freopen("pro.in", "r", stdin);
|
||||
#endif
|
||||
scanf("%d%d%d", &n, &a, &b);
|
||||
for (int i = 1; i <= n; i++) scanf("%Lf", &p[i]);
|
||||
for (int i = 1; i <= n; i++) scanf("%Lf", &q[i]);
|
||||
printf("%.2Lf\n", calc());
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user