#include <bits/stdc++.h> using namespace std; double oblicz_prawd(const vector<double>& p, long long min_sukcesow, long long idx = 0, long long sukcesy = 0, double akt_prawd = 1.0) { int n = p.size(); if (idx == n) return sukcesy >= min_sukcesow ? akt_prawd : 0.0; if (sukcesy >= min_sukcesow) return akt_prawd; return oblicz_prawd(p, min_sukcesow, idx + 1, sukcesy + 1, akt_prawd * p[idx]) + oblicz_prawd(p, min_sukcesow, idx + 1, sukcesy, akt_prawd * (1 - p[idx])); } int main() { int n, t; cin >> n >> t; vector<double> v(n); for (int i = 0; i < n; i++) { cin >> v[i]; } sort(v.begin(), v.end()); vector<double>values; for (int i = n-1; i >= 0; i--) { if(v[i] >= 0.5) { values.push_back(v[i]); } } if(!values.empty() && (values.size() - t) % 2 == 1) { values.pop_back(); } if(values.size() < t) { for(int i = n-values.size()-1; i > n-t-1; i--) { values.push_back(v[i]); } } double result = oblicz_prawd(values, t+(values.size()-t)/2); if(result < 0.000001) { cout << "0\n"; return 0; } cout << result << endl; 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 | #include <bits/stdc++.h> using namespace std; double oblicz_prawd(const vector<double>& p, long long min_sukcesow, long long idx = 0, long long sukcesy = 0, double akt_prawd = 1.0) { int n = p.size(); if (idx == n) return sukcesy >= min_sukcesow ? akt_prawd : 0.0; if (sukcesy >= min_sukcesow) return akt_prawd; return oblicz_prawd(p, min_sukcesow, idx + 1, sukcesy + 1, akt_prawd * p[idx]) + oblicz_prawd(p, min_sukcesow, idx + 1, sukcesy, akt_prawd * (1 - p[idx])); } int main() { int n, t; cin >> n >> t; vector<double> v(n); for (int i = 0; i < n; i++) { cin >> v[i]; } sort(v.begin(), v.end()); vector<double>values; for (int i = n-1; i >= 0; i--) { if(v[i] >= 0.5) { values.push_back(v[i]); } } if(!values.empty() && (values.size() - t) % 2 == 1) { values.pop_back(); } if(values.size() < t) { for(int i = n-values.size()-1; i > n-t-1; i--) { values.push_back(v[i]); } } double result = oblicz_prawd(values, t+(values.size()-t)/2); if(result < 0.000001) { cout << "0\n"; return 0; } cout << result << endl; return 0; } |