hdu6574 Rng(概率)

    科技2024-11-01  20

    题意:

    给定n,按照以下方法生成区间:先在[1,n]中随机选择一个R,然后在[1,R]中等概率随机生成一个L, 那么生成的区间为[L,R]。

    按照以上方法随机生成两个区间,问这两个区间相交的概率。

    答案对1e9+7取模。

    数据范围:n<=1e6

    解法:

    1.考虑计算不相交的概率

    题 目 的 先 R 再 L 是 没 有 很 大 作 用 的 , 改 成 先 L 再 R 也 一 样 , 题目的先R再L是没有很大作用的,改成先L再R也一样, RLLR

    其 实 就 是 随 机 选 择 一 个 区 间 , 其实就是随机选择一个区间,

    那 么 我 们 可 以 将 取 两 个 区 间 的 问 题 变 为 : 那么我们可以将取两个区间的问题变为:

    1. 第 一 个 区 间 先 取 一 个 R 1 , 再 取 一 个 L 1 1.第一个区间先取一个R1,再取一个L1 1.R1L1

    2. 第 二 个 区 间 先 取 一 个 L 2 , 再 取 一 个 R 2 2.第二个区间先取一个L2,再取一个R2 2.L2R2

    想 要 令 两 个 区 间 不 相 交 , 那 么 要 让 R 1 < L 2 想要令两个区间不相交,那么要让R1<L2 R1<L2

    方 案 数 为 ∑ R 1 = 1 n ∑ L 1 = R 1 + 1 n 1 方案数为\sum_{R1=1}^n\sum_{L1=R1+1}^n1 R1=1nL1=R1+1n1

    = n ∗ ( n − 1 ) / 2 =n*(n-1)/2 =n(n1)/2

    上 面 只 考 虑 了 R 1 和 L 2 , 没 有 考 虑 L 1 和 R 2 是 因 为 它 们 不 影 响 相 交 性 上面只考虑了R1和L2,没有考虑L1和R2是因为它们不影响相交性 R1L2L1R2

    任 意 选 取 R 1 和 L 2 的 方 案 数 为 n 2 任意选取R1和L2的方案数为n^2 R1L2n2

    那 么 不 相 交 的 概 率 为 n ∗ ( n − 1 ) / 2 n 2 = n − 1 2 n 那么不相交的概率为\frac {n*(n-1)/2}{n^2}=\frac {n-1}{2n} n2n(n1)/2=2nn1

    则 相 交 的 概 率 为 1 − n − 1 2 n = n + 1 2 n 则相交的概率为1-\frac {n-1}{2n}=\frac {n+1}{2n} 12nn1=2nn+1

    ps: 感觉有点玄学

    参考: https://www.cnblogs.com/kangkang-/p/12902071.html

    2.考虑直接计算相交的概率

    这个好像好想一点,懒得写了,鸽了

    code1:

    #include<bits/stdc++.h> using namespace std; #define ll long long int ppow(int a,int b,int mod){ int ans=1%mod;a%=mod; for(;b;a=1ll*a*a%mod,b>>=1)if(b&1)ans=1ll*ans*a%mod; return ans; } const int maxm=2e5+5; const int mod=1e9+7; signed main(){ ll n; while(cin>>n){ ll ans=(n+1)*ppow(2*n,mod-2,mod)%mod; cout<<ans<<endl; } return 0; }
    Processed: 0.018, SQL: 8