QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#724086 | #9540. Double 11 | ucup-team173 | WA | 1ms | 3892kb | C++20 | 2.3kb | 2024-11-08 09:25:25 | 2024-11-08 09:25:29 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mpr make_pair
// using ll = long long;
using db = double;
const int maxn = 211111;
int n, m;
db s[maxn];
db calc(int l, int r) {
assert(1 <= l && l <= r && r <= n);
return sqrt(1. * (r - l + 1) * (s[r] - s[l - 1]));
}
pair<db, int> solve(db v) {
static vector<db> dp(n + 1);
static vector<int> dpt(n + 1);
static deque<int> q, l, r;
q.clear(), l.clear(), r.clear();
auto calc = [&](int i, int j) {
return dp[i - 1] + sqrt((s[j] - s[i - 1]) * (j - i + 1)) - v;
};
for (int i = 1; i <= n; i++) {
if (q.size() && r.front() < i) {
q.pop_front(), l.pop_front(), r.pop_front();
}
if (q.size()) l.front() = i;
while (q.size() && calc(q.back(), l.back()) >= calc(i, l.back())) {
q.pop_back(), l.pop_back(), r.pop_back();
}
if (q.size() == 0) {
q.emplace_back(i);
l.emplace_back(i);
r.emplace_back(n);
} else if (calc(q.back(), n) >= calc(i, n)) {
int ll = l.back(), rr = n;
while (ll <= rr) {
int mid = (ll + rr) / 2;
if (calc(i, mid) <= calc(q.back(), mid))
rr = mid - 1;
else
ll = mid + 1;
}
r.back() = rr;
q.emplace_back(i), l.emplace_back(ll), r.emplace_back(n);
}
dp[i] = calc(q.front(), i);
dpt[i] = dpt[q.front() - 1] + 1;
}
return mpr(dp[n], dpt[n]);
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
sort(s + 1, s + n + 1);
for (int i = 1; i <= n; i++) {
s[i] += s[i - 1];
}
db l = -1e8, r = 0;
int timer = 70;
while (timer--) {
db mid = (l + r) * 0.5;
auto res = solve(mid);
if (res.se < m)
l = mid;
else
r = mid;
}
auto res = solve(l);
cout << fixed << setprecision(20) << (long double)(res.fi + res.se * l) << "\n";
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3892kb
input:
4 2 1 2 3 4
output:
6.32455532033675904557
result:
wrong answer 1st numbers differ - expected: '6.1911471', found: '6.3245553', error = '0.0215482'