#include <bits/stdc++.h>
using namespace std;
#ifdef DEBUG
#include "debug.hpp"
#else
#define debug(...) (void)0
#endif
namespace R = ranges;
namespace V = views;
auto ra(auto x, auto y) { return R::iota_view(x, y); }
auto rae(auto x, auto y) { return ra(x, y + 1); }
using i64 = int64_t;
void solve() {
int n, t;
cin >> n >> t;
vector<double> p(n + 1);
for (auto i : rae(1, n)) {
cin >> p[i];
}
sort(begin(p) + 1, end(p));
reverse(begin(p) + 1, end(p));
vector dp(n + 1, vector<double>(n + 1));
dp[0][0] = 1;
for (auto i : rae(1, n)) {
dp[i][0] = (1 - p[i]) * dp[i - 1][0];
for (auto j : rae(1, n)) {
dp[i][j] = p[i] * dp[i - 1][j - 1] + (1 - p[i]) * dp[i - 1][j];
}
}
double ans = 0;
for (auto i : rae(t, n)) {
// x * 1 + (i - x) * -1 = t => x = i - (i - t) / 2
int from = i - (i - t) / 2;
ans = max(ans, accumulate(begin(dp[i]) + from, end(dp[i]), double(0)));
}
cout << fixed << setprecision(20) << ans << endl;
}
int32_t main() {
cin.tie(nullptr)->sync_with_stdio(false);
int t = 1;
// cin >> t;
for (auto tc_n : ra(0, t)) {
debug(tc_n);
solve();
cout.flush();
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "debug.hpp" #else #define debug(...) (void)0 #endif namespace R = ranges; namespace V = views; auto ra(auto x, auto y) { return R::iota_view(x, y); } auto rae(auto x, auto y) { return ra(x, y + 1); } using i64 = int64_t; void solve() { int n, t; cin >> n >> t; vector<double> p(n + 1); for (auto i : rae(1, n)) { cin >> p[i]; } sort(begin(p) + 1, end(p)); reverse(begin(p) + 1, end(p)); vector dp(n + 1, vector<double>(n + 1)); dp[0][0] = 1; for (auto i : rae(1, n)) { dp[i][0] = (1 - p[i]) * dp[i - 1][0]; for (auto j : rae(1, n)) { dp[i][j] = p[i] * dp[i - 1][j - 1] + (1 - p[i]) * dp[i - 1][j]; } } double ans = 0; for (auto i : rae(t, n)) { // x * 1 + (i - x) * -1 = t => x = i - (i - t) / 2 int from = i - (i - t) / 2; ans = max(ans, accumulate(begin(dp[i]) + from, end(dp[i]), double(0))); } cout << fixed << setprecision(20) << ans << endl; } int32_t main() { cin.tie(nullptr)->sync_with_stdio(false); int t = 1; // cin >> t; for (auto tc_n : ra(0, t)) { debug(tc_n); solve(); cout.flush(); } } |
English