解题思路:简单的期望dp

注意事项:乘法一定要防止long long越界

参考代码:

#include<bits/stdc++.h>//这道题自己曾经不会期望dp,不会逆元,所以考场做不出来。

//现在自己靠自己写了出来,很好,证明自己进步了。

using namespace std;

typedef long long ll;

#define maxn 100010

ll p=998244353;

ll n,x[maxn],y[maxn],dp[maxn];

ll qpow(ll di,ll zhi,ll mod){

    ll ans=1,base=di;

    while(zhi){

        if(zhi&1)ans*=base;

        base*=base;

        zhi>>=1;//核心代码就这三行

        ans%=mod;

        base%=mod;

    }

    return ans;

}

int main(){

    scanf("%lld",&n);

    for(int i=1;i<=n;i++){

        scanf("%lld%lld",&x[i],&y[i]);

    }

    for(int i=1;i<=n;i++){

        dp[i]=(dp[i-1]+1)*(y[i]%p);

        dp[i]%=p;

        dp[i]*=qpow(y[i]-x[i],p-2,p);//(y[i]-x[i])模p的逆元是(y[i]-x[i])^(p-2)modp

        dp[i]%=p;//这样就百分百不会越ll的界

    }

    printf("%lld",dp[n]);

    system("pause");

    return 0;

}


点赞(0)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

manstain 2年前 回复TA
你好,为啥你的代码能在某个x[i]=y[i]时求出答案而不是得出0呢