#include <bits/stdc++.h> #define ll long long #define llu long long unsigned #define ld long double #define fr(i,n) for(int i=0;i<n;i++) #define watch(x) cout<<(#x)<<"=="<<(x)<<endl #define ft first #define sc second #define mp make_pair #define pb push_back #define vi vector<int> #define pii pair<int,int> #define P 1000000007llu #define N 5005 #define LC 262144 using namespace std; int n,T; double p[N], E[N], f[N][N]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>T; fr(i,n) { cin>>p[i]; E[i]=2.0*p[i]-1.0, f[n][i]=0.0, f[i][0]=1.0; // watch(p[i]); watch(E[i]); watch(n); watch(i); watch(f[n][i]); watch(f[i][0]); } f[n][0]=1.0; sort(E,E+n); sort(p,p+n); int it=(int)(lower_bound(E,E+n,0.5)-E); if(n-it<T) it=n-T; /* fr(i,n) watch(E[i]); watch(it);*/ for(int i=n-1;i>=it;i--) for(int t=1;t<=T;t++) { f[i][t]=p[i]*f[i+1][t-1]+(1.0-p[i])*f[i+1][t]; //watch(i); watch(t); watch(f[i][t]); watch(f[i+1][t-1]); watch(f[i+1][t]); } if(f[it][T]<=1e-6) cout<<"0\n"; else cout<<f[it][T]<<'\n'; 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 | #include <bits/stdc++.h> #define ll long long #define llu long long unsigned #define ld long double #define fr(i,n) for(int i=0;i<n;i++) #define watch(x) cout<<(#x)<<"=="<<(x)<<endl #define ft first #define sc second #define mp make_pair #define pb push_back #define vi vector<int> #define pii pair<int,int> #define P 1000000007llu #define N 5005 #define LC 262144 using namespace std; int n,T; double p[N], E[N], f[N][N]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>T; fr(i,n) { cin>>p[i]; E[i]=2.0*p[i]-1.0, f[n][i]=0.0, f[i][0]=1.0; // watch(p[i]); watch(E[i]); watch(n); watch(i); watch(f[n][i]); watch(f[i][0]); } f[n][0]=1.0; sort(E,E+n); sort(p,p+n); int it=(int)(lower_bound(E,E+n,0.5)-E); if(n-it<T) it=n-T; /* fr(i,n) watch(E[i]); watch(it);*/ for(int i=n-1;i>=it;i--) for(int t=1;t<=T;t++) { f[i][t]=p[i]*f[i+1][t-1]+(1.0-p[i])*f[i+1][t]; //watch(i); watch(t); watch(f[i][t]); watch(f[i+1][t-1]); watch(f[i+1][t]); } if(f[it][T]<=1e-6) cout<<"0\n"; else cout<<f[it][T]<<'\n'; return 0; } |