#include #include #include #include #include #include using namespace std; int N; vector P; vector S; double walk(double p, int up, int down) { if (p == 0.5) return double(down) / (up+down); return (1-pow((1-p)/p, down)) / (1-pow((1-p)/p, up+down)); } int main() { while (cin >> N) { P.resize(N); for (auto& p : P) cin >> p; S.resize(N); for (auto& s : S) cin >> s; S.insert(S.begin(), 0); vector memo(1< doit = [&](int r, int b) { if (b == 0) return 1.0; double& ret = memo[b]; if (ret >= 0.0) return ret; ret = 0.0; for (int i = 0; i < N; i++) if (b&(1<