已退役


私信TA

用户名:15893197790

访问量:13469

签 名:

努力学习,积极生活。

等  级
排  名 383
经  验 4982
参赛次数 0
文章发表 43
年  龄 0
在职情况 学生
学  校 南京大学
专  业 计算机科学与技术

  自我简介:

已退役。研究生方向为AI+软件工程,欢迎学术交流!

解题思路:简单的期望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分

11 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

你好,为啥你的代码能在某个x[i]=y[i]时求出答案而不是得出0呢
2022-12-15 21:24:27
  • «
  • 1
  • »