美团3.12笔试第五题求教

小仓的射击练习1
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
小仓酷爱射击运动。今天的小仓会进行N轮射击,已知第i次射击,她击中靶心的概率是a[i] -1 。

小仓想知道N轮射击后,偏离靶心次数为 0 ,1 ,2 次的概率分别是多少。

输入
第一行一个数N,代表射击轮数。 

第二行 N个数a[i],第 i个数为a[i]。

1≤N≤100,000 

1a[i]<998244353

输出
不难证明答案可以表示成一个最简分数 p * q -1

你需要输出三个p * q -1 对 998244353取模后的结果,以此来表示偏离靶心次数为 0 , 1 , 2时的概率。

其中q-1是q 在模意义下的逆元,满足q-1* q = 1 mod 998244353

例如1/4, 可以写成748683265,原因是4 * 748683265 % 998244353 = 1,也有且仅有x =  7486832651 <= x < 998244353满足乘积等于1

样例输入
2
2 2
样例输出
748683265 499122177 748683265

#美团笔试##美团##笔试题目#
全部评论
mod=998244353,设M是所有ai相乘对mod取余。次数0:也就是1/M%mod次数1:求sum{(ai-1)/M | i=1~n|}%mod次数2:设是第i次和第j次脱靶,那么概率是(ai*aj-ai-aj+1)/M%mod,拆开之后后面三项ai/M aj/M 和1/M对于所有的i和j只需要O(n)就都求出来了,而ai*aj/M虽然看上去是两两组合需要O(n^2),其实只看分子就是a1*(a2+..+an)+a2(a3+..+an)+a3()....,这些通过预处理a数组的后缀和就可以做到O(n)复杂度。需要求逆元,复杂度是log。总的复杂度为O(nlog(mod))
2 回复 分享
发布于 2020-03-12 23:01
直接dp. 0/1/2,代表答案,线性扫。。但是为啥70%?
点赞 回复 分享
发布于 2020-03-13 07:37
998244353是素数,q-1*q = 1 等价 998244353x+q*q-1 = 1,经典扩展欧几里得
点赞 回复 分享
发布于 2020-03-12 22:12

相关推荐

06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在午休:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务