提交时间:2023-01-20 14:43:21
运行 ID: 67864
#include <bits/stdc++.h> using namespace std; const int MXN = 100005; const int DVS = 1e9 + 7; const int INV2 = 5e8 + 4; int N, bs, sm, inv[MXN], fac[MXN], facinv[MXN]; bool str[MXN]; int main() { cin >> N; for (int i(0); i != N; ++i) { char c(0); cin >> c; if (c == '0') str[i] = true; } inv[1] = fac[0] = fac[1] = facinv[0] = facinv[1] = 1; for (int i(2); i < N; ++i) { inv[i] = inv[DVS % i] * 1LL * (DVS - DVS / i) % DVS; fac[i] = fac[i - 1] * 1LL * i % DVS; facinv[i] = facinv[i - 1] * 1LL * inv[i] % DVS; } for (int i(0); i != N; ++i) { if (str[i]) sm += fac[N - 1] * 1LL * facinv[i] % DVS * facinv[N - 1 - i] % DVS; } bs = 1; for (int i(1); i != N; ++i) bs = bs * 1LL * INV2 % DVS; cout << sm * 1LL * bs % DVS << endl; return 0; }