/
1753.test.cpp
53 lines (46 loc) · 982 Bytes
/
1753.test.cpp
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
#define PROBLEM "https://yukicoder.me/problems/no/1753"
#include "my_template.hpp"
#include "other/io.hpp"
#include "mod/modint.hpp"
#include "setfunc/hadamard.hpp"
using mint = modint998;
// using mint = double;
void solve() {
LL(N);
vc<mint> P(N + 1);
{
VEC(ll, A, N + 1);
mint den = mint(1) / mint(SUM<ll>(A));
FOR(i, N + 1) P[i] = den * mint(A[i]);
}
const int K = 10;
auto calc = [&](int ng) -> vc<mint> {
vc<mint> X(1 << K);
FOR(i, 1, N + 1) {
if (i == ng) continue;
X[i] += P[i];
}
hadamard<mint>(X);
// print(X);
for (auto&& x: X) { x = mint(1) / (mint(1) - x); }
hadamard<mint>(X);
return X;
};
mint ANS = 0;
auto A = calc(-1);
ANS += A[0];
FOR(i, 1, N + 1) {
auto B = calc(i);
ANS += A[i] - B[i];
}
ANS *= P[0] / mint(1 << K);
ANS = mint(1) - ANS;
print(ANS);
}
signed main() {
cout << fixed << setprecision(15);
ll T = 1;
// LL(T);
FOR(T) solve();
return 0;
}