#include<bits/stdc++.h> using namespace std; typedef double in; void solve() { int a,b; cin>>a>>b; vector<in>v(a); for(int z=0;z<a;z++)cin>>v[z]; sort(v.begin(),v.end()); vector<in> m(a*2+3,0); in wyn=0; m[1+a+1]=v.back(); if(b==1)wyn=v.back(); m[-1+a+1]=1-v.back(); int i=1; for(int z=(int)v.size()-2;z>=0;z--) { i++; in po=v[z]; in dop=1-po; vector<pair<int,in>>temp; in tem=0; for(int w=-i;w<=i;w++) { in pom=m[w+1+a+1]*dop+m[w-1+a+1]*po; if(w>=b)tem+=pom; temp.push_back({w+a+1,pom}); } for(auto w:temp)m[w.first]=w.second; wyn=max(wyn,tem); } cout<<fixed<<setprecision(10)<<wyn; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int h=1; while(h--)solve(); 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<bits/stdc++.h> using namespace std; typedef double in; void solve() { int a,b; cin>>a>>b; vector<in>v(a); for(int z=0;z<a;z++)cin>>v[z]; sort(v.begin(),v.end()); vector<in> m(a*2+3,0); in wyn=0; m[1+a+1]=v.back(); if(b==1)wyn=v.back(); m[-1+a+1]=1-v.back(); int i=1; for(int z=(int)v.size()-2;z>=0;z--) { i++; in po=v[z]; in dop=1-po; vector<pair<int,in>>temp; in tem=0; for(int w=-i;w<=i;w++) { in pom=m[w+1+a+1]*dop+m[w-1+a+1]*po; if(w>=b)tem+=pom; temp.push_back({w+a+1,pom}); } for(auto w:temp)m[w.first]=w.second; wyn=max(wyn,tem); } cout<<fixed<<setprecision(10)<<wyn; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int h=1; while(h--)solve(); return 0; } |