#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ld long double
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
ld a[50004];
ld eps=1e-15;
int main()
{
ios_base::sync_with_stdio(0);
int n=50000,k=10000;
cin>>n>>k;
for(int i=0;i<n;i++) a[i]=0.6;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
reverse(a,a+n);
ld mx=0;
deque<ld> dp,nx;
dp.push_back(1);
int pf=0;
for(int i=0;i<n;i++)
{
nx.clear();
ld ls=0;
for(ld j:dp)
{
nx.push_back(ls+j*(1-a[i]));
ls=j*a[i];
}
nx.push_back(ls);
if(nx.front()<eps) pf++,nx.pop_front();
if(nx.back()<eps) nx.pop_back();
ld ts=0;
for(int j=0;j<nx.size();j++)
{
if(j*2-i-1+pf*2>=k) ts+=nx[j];
}
// printf("%d %5Lf\n",i,ts);
mx=max(mx,ts);
dp.swap(nx);
}
printf("%.10Lf\n",mx);
return 0;
}
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 54 | #include<set> #include<map> #include<queue> #include<vector> #include<algorithm> #include<bits/stdc++.h> #define pr pair #define f first #define s second #define ld long double #define mp make_pair #define pll pr<ll,ll> #define pii pr<int,int> #define piii pr<int,pii> using namespace std; ld a[50004]; ld eps=1e-15; int main() { ios_base::sync_with_stdio(0); int n=50000,k=10000; cin>>n>>k; for(int i=0;i<n;i++) a[i]=0.6; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); reverse(a,a+n); ld mx=0; deque<ld> dp,nx; dp.push_back(1); int pf=0; for(int i=0;i<n;i++) { nx.clear(); ld ls=0; for(ld j:dp) { nx.push_back(ls+j*(1-a[i])); ls=j*a[i]; } nx.push_back(ls); if(nx.front()<eps) pf++,nx.pop_front(); if(nx.back()<eps) nx.pop_back(); ld ts=0; for(int j=0;j<nx.size();j++) { if(j*2-i-1+pf*2>=k) ts+=nx[j]; } // printf("%d %5Lf\n",i,ts); mx=max(mx,ts); dp.swap(nx); } printf("%.10Lf\n",mx); return 0; } |
English