1 条题解

  • 0
    @ 2025-8-24 22:10:17

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Binary_Search_Tree
    博客 https://cnblogs.com/bestlxm

    搬运于2025-08-24 22:10:17,当前版本为作者最后更新于2019-07-29 14:38:46,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    因为a和b的产生方式完全相同,所以a>b与a<b的概率是相等的。

    设p表示a=b的概率,那么答案就是1p2\frac{1-p}{2}

    问题转化为如何计算a=b的概率。

    对于数列中的第i个元素,aia_i=j=1ij\sum_{j=1}^ij=i(i+1)2\frac{i(i+1)}{2}

    那么恰好选中第i个元素中的一个数的概率:

    3i(i+1)n(n+1)(n+2)\frac{3i(i+1)}{n(n+1)(n+2)}×1i(i+1)2\frac{1}{\frac{i(i+1)}{2}}=6n(n+1)(n+2)\frac{6}{n(n+1)(n+2)}

    因为1在数列中被n个元素包含,2----3被(n-1)个元素包含,4----6被(n-2)个元素包含,

    i(i1)2\frac{i(i-1)}{2}+1----i(i+1)2\frac{i(i+1)}{2}被(n+1-i)个元素包含,

    所以选中i(i1)2\frac{i(i-1)}{2}+1----i(i+1)2\frac{i(i+1)}{2}中任意一个数的概率为 6(n+1i)n(n+1)(n+2)\frac{6(n+1-i)}{n(n+1)(n+2)}

    所以得到p的表达式

    p=i=1ni×[6(n+1i)n(n+1)(n+2)]2\sum_{i=1}^ni×[\frac{6(n+1-i)}{n(n+1)(n+2)}]^2=36i=1ni(n+1i)2[n(n+1)(n+2)]2\frac{36\sum_{i=1}^ni(n+1-i)^2}{[n(n+1)(n+2)]^2}=3n(n+2)\frac{3}{n(n+2)}

    所以答案是13n(n+2)2\frac{1-\frac{3}{n(n+2)}}{2}(当n为正无穷时,答案为12\frac{1}{2})

    推出公式后,代码就非常好写了:

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #define M 5000005
    #define mod 998244353ll
    using namespace std;
    long long n;
    long long inv(long long x){
    	if (x==1) return 1;
    	return (mod-mod/x)*inv(mod%x)%mod;
    }
    int main(){
    	scanf("%lld",&n);n%=mod;
    	if (!n) printf("%lld",inv(2));
    	else printf("%lld",inv(2)*(1-3*inv(n)%mod*inv(n+2)%mod+mod)%mod);
    	return 0;
    }
    
    
    • 1

    信息

    ID
    3693
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者