const int N = 1e3 + 5;
ll fact[N+1], infact[N+1];
void x_x()
{
infact[0] = fact[0] = 1;
f(i, 1, N-1)
{
fact[i] = fact[i - 1] * i%mod;
infact[i] = infact[i - 1] * inv(i, mod)%mod;
}
}
ll C(int a, int b)
{
return fact[a] * infact[a - b] % mod*infact[b] % mod;
}
int a[N];
int main()
{
//freopen("in.txt", "r", stdin);
int n, m, x;
cin >> n >> m;
x_x();
while (m--)
{
scanf("%d", &x);
a[x]++;
}
ll ans = 1;
int now = 0;
vector<int> tmp;
f(i, 1, n)
{
if (a[i] == 1)
{
tmp.emplace_back(now);
now = 0;
}
else now++;
}if (now >=0)tmp.emplace_back(now);
ll sum = 0;
for(auto I : tmp)sum += I;
//for (auto I : tmp)debug(I);
f(i, 0, (int)tmp.size() - 1)
{
ans = ans * C(sum, tmp[i])%mod;
sum -= tmp[i];
if (i == 0 || i == tmp.size() - 1)continue;
ans = ans*quickmod(2, max(tmp[i] - 1,0),mod)%mod;
}
cout << ans << endl;
return 0;
}
C. Shaass and Lights(组合数学)
最新推荐文章于 2021-09-16 20:41:27 发布