FAOI-R2【B】A trip to Macao 题解
\texttt{Subtask 0}
爆搜。或者直接输出
\texttt{Subtask 0.5}
设
递推式:
时间 / 空间复杂度为
\texttt{Subtask 1}
设
时间 / 空间复杂度为
\texttt{Subtask 2}
不难发现,求
| 存储的下标 | |
|---|---|
不难发现,每次从右往前更新即可。时间 / 空间复杂度为
参考代码(std)
#include <bits/stdc++.h>
using namespace std;
const int B = 32, P = 1e9 + 7, M = 1e6 + 5;
int b[B], p[B], a[M];
int main()
{
int n, m, s = 0;
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
int t = i & (-i);
for (int j = 1, k = 1, l = i; k <= t; j++, k <<= 1, l >>= 1)
{
b[j] <<= 1;
b[j] -= b[j + 1];
if (p[j] != m && a[p[j] + 1] == l) b[j]++, p[j]++;
b[j] %= P;
if (b[j] < 0) b[j] += P;
}
if (i == n - 1) s -= b[1];
if (i == n) s += b[1];
}
cout << (s % P + P) % P;
return 0;
}