ARC141B
思路:
首先看到序列长度是
实际上我们仔细分析一下,假如前
那么因为要求
那么就可以考虑 DP,设
那么枚举
Code:
#include<bits/stdc++.h>
using namespace std;
const int mod = 998244353;
typedef long long ll;
ll n, m;
ll dp[100] = {0, 1};
int main() {
scanf("%lld%lld", &n, &m);
int Log2 = 1;
for (ll x = 1; x <= m; ++Log2, x *= 2) {
ll t = (min(m, x * 2 - 1ll) - x + 1) % mod;
for (int j = Log2; j; --j) dp[j] = (dp[j] + dp[j - 1] * t % mod) % mod;
}
if (n > Log2) puts("0");
else printf("%lld\n", dp[n]);
return 0;
}