做题记录

CF1292B

CF1292B

观察收集点的式子,不难看出来这个函数的图像是在不断爆炸增长的,所以我们可以先往 $ P_0 $ 方向搜索,搜完 \(P_0\) 再去 \(P_{+\infty}\)

这个题目中是要我们去求曼哈顿距离。(了解了一下)

CF838D

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

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; }
posted @ 2023-10-27 18:07  carp_oier  阅读(35)  评论(0)    收藏  举报