您的位置:首页 > 其它

【Cf #178 A】Shaass and Lights(组合数)

2018-07-11 20:57 302 查看

#include <cstdio>
#include <algorithm>

typedef long long LL;
const int N = 1005, MOD = 1e9 + 7;

int n, m, a
, d
, pw2
, fac
;

int Pow(int x, int b, int re = 1) {
for (; b; b >>= 1, x = (LL) x * x % MOD) if (b & 1) re = (LL) re * x % MOD;
return re;
}

int main() {
scanf("%d%d", &n, &m);
pw2[0] = fac[0] = 1;
for (int i = 1; i <= m; ++i) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; ++i) {
pw2[i] = pw2[i - 1] * 2 % MOD;
fac[i] = (LL) fac[i - 1] * i % MOD;
}
std::sort(a + 1, a + 1 + m);

int ans = fac[n - m];
for (int i = 1; i < m; ++i) {
int d = a[i + 1] - a[i] - 1;
if (d == 0) continue;
ans = (LL) ans * Pow(fac[d], MOD - 2) % MOD;
ans = (LL) ans * pw2[d - 1] % MOD;
}
if (a[1] > 1) ans = (LL) ans * Pow(fac[a[1] - 1], MOD - 2) % MOD;
if (a[m] < n) ans = (LL) ans * Pow(fac[n - a[m]], MOD - 2) % MOD;
printf("%d\n", ans);

return 0;
}
View Code  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: