区间缩小

区间缩小

题目描述

给定一个正整数 n,我们初始设定两个变量 lr,其中 l=1r=n。我们将执行以下步骤:

  1. 如果 l=r,则结束操作;否则,执行步骤 2
  2. 从区间 [l,r] 中等概率地选取一个正整数 x。然后,以下两种情况互斥地发生:以概率 pl 更新为 x,以概率 1pr 更新为 x。接着返回步骤 1

经过上述操作,最终必然会有 l=r。设随机变量 X 为最终得到的数字(即 l),求 X 的数学期望。 答案对 998244353 取模。

输入描述:

第一行给出两个正整数 n,x (1n106,0x100),其中 n 的具体意义如题意所示。令 p=x100 。其中 p 的意义如题意所示。

输出描述:

输出一个整数,表示答案。

示例1

输入

234 10

输出

898419942

 

解题思路

  期望题就没一道会做的。

  最关键的性质,看不出来就别想做出来了。定义 E(l,r) 表示在区间 [l,r] 内最终得到的数字的期望值,有 E(l+x,r+x)=E(l,r)+x

  简单证明。定义 pi(lir) 表示最终得到的数字为 i 的概率,那么有 E(l,r)=i=lripi。而 E(l+x,r+x)=i=lr(i+x)pi+x=i=lripi+x+xi=lrpi+x=i=lripi+x+x。又因为区间 [l,r][l+x,r+x] 的长度一样,依据题意长度相同的区间最终得到数字的相对位置的概率相同,即 pi=pi+x,因此有 E(l+x,r+x)=E(l,r)+x

  所以对于每种长度的区间,我们只需求出 E(1,i)(1in) 即可。用 dp 的思路求解该状态,即根据下一步左端点或右端点停留在哪个位置进行状态转移,有状态转移方程

E(1,i)=j=1ipE(j,i)i+j=1i(1p)E(1,j)ii1iE(1,i)=j=2ipE(j,i)i+j=1i1(1p)E(1,j)iE(1,i)=1i1(j=2ipE(j,i)+j=1i1(1p)E(1,j))E(1,i)=1i1(j=1i1p(E(1,ij)+j)+j=1i1(1p)E(1,j))E(1,i)=1i1(p(i1)i2+j=1i1E(1,j))

  只需累加前缀 E(1,1)++E(1,i1) 就可以实现 O(1) 转移(需要预处理逆元)。

  AC 代码如下,时间复杂度为 O(nlogmod)

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

const int N = 1e6 + 5, mod = 998244353;

int f[N];

int qmi(int a, int k) {
    int ret = 1;
    while (k) {
        if (k & 1) ret = 1ll * ret * a % mod;
        a = 1ll * a * a % mod;
        k >>= 1;
    }
    return ret;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    m = 1ll * m * qmi(100, mod - 2) % mod;
    f[1] = 1;
    for (int i = 2, s = 1; i <= n; i++) {
        f[i] = (s + i * (i - 1ll) % mod * qmi(2, mod - 2) % mod * m) % mod * qmi(i - 1, mod - 2) % mod;
        s = (s + f[i]) % mod;
    }
    cout << f[n];
    
    return 0;
}

 

参考资料

  集美大学第十一届校程序设计竞赛 验题人题解:https://zhuanlan.zhihu.com/p/1431495113

posted @   onlyblues  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2023-10-20 统计子矩阵
2023-10-20 [COCI2021-2022#6] Zemljište
Web Analytics
点击右上角即可分享
微信分享提示