做题记录
CF1292B
观察收集点的式子,不难看出来这个函数的图像是在不断爆炸增长的,所以我们可以先往 $ P_0 $ 方向搜索,搜完 \(P_0\) 再去 \(P_{+\infty}\)。
这个题目中是要我们去求曼哈顿距离。(了解了一下)
CF838D
我们可以向其中插入一个虚点 \(n + 1\),然后将 \(1\) 和 \(n\) 连接起来,这样就从一个链变成了一个环。那么我们找不到座位就等价于选择到了第 \(n + 1\) 个点。然后我们考虑总共可能出现的选择个数。\(sum = (2 \times (n+ 1))^m\),考虑可能的合法概率是 \(P(true) = 1 - P(false) = 1 - \frac{m}{n + 1} = \frac{n + 1 - m}{n + 1}\)。
最后答案就是总的方案数乘概率。\(ans = sum \times P(true) = (2 \times (n+ 1))^m \times \frac{n +1 - m}{n + 1}\)
CF855E
比较裸的数位dp,但是我们在进行记忆化的时候存一下这个的进制,然后只需要初始化一次,不用一直初始化了。
core code
inline ll dp(ll pos, ll sta, ll lim, ll f0)
{
if(!pos) return !sta;
if(!lim && !f0 && ~f[pos][b][sta]) return f[pos][b][sta];
ll y = lim ? a[pos] : (b - 1), ans = 0;
fos(i, 0, y) ans += dp(pos - 1, (f0 & !i) ? 0 : sta ^ (1 << i), (i == y) & lim, !i & f0);
if(!lim && !f0) f[pos][b][sta] = ans;
return ans;
}
inline ll dp_dev(ll x) { len = 0; while(x) a[ ++ len] = x % b, x /= b; return dp(len, 0, 1, 1); }
inline void solve() { read(b), read(l), read(r); ww(dp_dev(r) - dp_dev(l - 1)), wl; }

浙公网安备 33010602011771号