超简单(super)
超简单(super)
题目描述
有一个n面的骰子,第i面的数是vi,朝上的概率是pi。
教室的最后一排有一个人,不停地抛这个骰子,直到某一面朝上了两次,就停止抛骰子,但他不知道所有朝上的面的数字的和的期望E是多少。
老班一脸嘲讽:“这不是超简单嘛。”
输入
输入的第一行包含一个正整数n。
输入的第二行包含n个正整数,表示vi。
输入的第三行包含n个非负整数,表示模998244353意义下的pi,保证所有pi的和为1。
n,vi,pi的含义见问题描述。
输出
输出一行一个非负整数E表示模998244353意义下的E。
样例输入
<span style="color:#333333"><span style="color:#333333">【样例输入】
2
1 2
332748118 665496236
</span></span>
样例输出
<span style="color:#333333"><span style="color:#333333">【样例输出】
961272344
</span></span>
提示
【样例说明】
骰子共有2个面。
第一面的数为1,朝上的概率为1/3;
第二面的数为2,朝上的概率为2/3。
所有情况列举如下:
|
第1次朝上的面 |
第2次朝上的面 |
第3次朝上的面 |
朝上的面的和 |
概率 |
|
1 |
1 |
/ |
2 |
1/9 |
|
1 |
2 |
1 |
4 |
2/27 |
|
1 |
2 |
2 |
5 |
4/27 |
|
2 |
1 |
1 |
4 |
2/27 |
|
2 |
1 |
2 |
5 |
4/27 |
|
2 |
2 |
/ |
4 |
4/9 |
所以E=2*1/9+4*2/27+5*4/27+4*2/27+5*4/27+4*4/9=110/27。
【子任务】
|
测试点 |
n |
vi,pi |
|
1~4 |
≤8 |
<998244353 |
|
5~8 |
≤50 |
|
|
9~12 |
≤100 |
|
|
13~20 |
≤500 |
solution
期望dp
令f[i][j]表示前i张牌选j张得期望
若f[i][j]=PS,新加入i点,那么新的期望为P*pi*(S+vi)
展开得到PS*pi+P*pi*vi
于是我们还需维护期望的和g[i][j]=P转移式有了
f[i][j]=f[i-1][j]+f[i-1][j-1]*pi+g[i-1][j-1]*vi
我们可以枚举哪一位为出现两次的
效率O(n^3)
jyc神犇有优化
因为这个dp与数的顺序无关(不同顺序丢进去出来的是一个结果)
我们可以把最后一维当成我要禁掉的
倒推出n-1维
效率O(n^2)
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 505
#define ll long long
#define mod 998244353
using namespace std;
int n;
ll v[maxn],p[maxn],f[maxn][maxn],g[maxn][maxn],ans,h[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%lld",&v[i]);
for(int i=1;i<=n;i++)scanf("%lld",&p[i]);
h[0]=1;
for(int i=1;i<=n;i++)h[i]=(h[i-1]*i)%mod;
for(int i=0;i<=n;i++)g[i][0]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++){
f[i][j]=f[i-1][j]+(f[i-1][j-1]*p[i])%mod+((g[i-1][j-1]*p[i])%mod*v[i])%mod;
f[i][j]%=mod;
g[i][j]=g[i-1][j]%mod+g[i-1][j-1]*p[i]%mod;
}
for(int b=1;b<=n;b++){
int vb=v[b],pb=p[b];
for(int j=1;j<=n;j++){
f[n-1][j]=f[n][j]-(f[n-1][j-1]*pb)%mod-((g[n-1][j-1]*pb)%mod*vb)%mod;
f[n][j]%=mod;
g[n-1][j]=g[n][j]-g[n-1][j-1]*pb%mod;
}
n--;
for(int i=0;i<=n;i++){
ll tmp=(f[n][i]*pb)%mod*pb;tmp%=mod;
tmp=tmp+g[n][i]*pb%mod*pb%mod*2*vb%mod;
ans=ans+(tmp*h[i+1])%mod;ans%=mod;
}
n++;
}
ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
return 0;
}
超简单(super)的更多相关文章
- 【Android自己定义View实战】之自己定义超简单SearchView搜索框
[Android自己定义View实战]之自己定义超简单SearchView搜索框 这篇文章是对之前文章的翻新,至于为什么我要又一次改动这篇文章?原因例如以下 1.有人举报我抄袭,原文链接:http:/ ...
- Google Pixel 超分辨率--Super Resolution Zoom
Google Pixel 超分辨率--Super Resolution Zoom Google 的Super Res Zoom技术,主要用于在zoom时增强画面细节以及提升在夜景下的效果. 文章的主要 ...
- laya fgui 超简单的UI框架
FairyGUI 超简单的UI框架 Laya使用fgui的超简单UI框架 使用场景:用于使用fgui进行layaUI开发的程序人员 整个框架分为3个模块,共有4个类: FGUIManager :FGU ...
- 把C#程序(含多个Dll)合并成一个Exe的超简单方法
开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超 ...
- 记住密码超简单实现(C#)
实现效果如下 实现过程 [Serializable] class User { //记住密码 private string loginID; public string LoginID { get { ...
- 超简单的JNI——NDK开发教程
不好意思各位,我按照网上一些教程进行JNI开发,折腾了半天也没成功,最后自己瞎搞搞定了,其实超简单的,网上的教程应该过时了,最新版的AS就包含了NDK编译的功能,完全不用手动javah,各种包名路径的 ...
- ASP.NET中一种超简单的Ajax解决方案
为什么是Ajax2? 因为之前有一个blqw.Ajax,并且已经在项目中投入使用了,但是没有这个方便,这个是后来才弄的,为了纪念第一版的blqw.Ajax,所以这个就2了... 话说看了评论才发现,原 ...
- chm转换为html的超简单方法
在Windows下chm转换为html的超简单方法(反编译CHM文件的方法) 通过调用Windows命令,将chm 文件转换为html 文件. 方法: 命令行(cmd),输入hh -decompile ...
- mysql主从复制(超简单)
mysql主从复制(超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql ...
随机推荐
- Windows8.1任务栏取消oneDrive图标
Windows8.1任务栏会有oneDrive图标,用不着,想取消,方法如下:
- Bootstrap 折叠(collapse)插件面板
折叠插件(collapse)可以很容易地让页面区域折叠起来, 无论您是用它来创建折叠导航还是内容面板,它都允许很多内容选项. 您可以使用折叠插件 1.创建可折叠的分组或折叠的面板 <!DOCTY ...
- opencv anaconda
from: http://blog.csdn.net/fairylrt/article/details/43560525 Anaconda是一个python的一个包装,或者不单单是这样.你可以认为An ...
- cf550D. Regular Bridge(构造)
题意 给出一个$k$,构造一个无向图,使得每个点的度数为$k$,且存在一个桥 Sol 神仙题 一篇写的非常好的博客:http://www.cnblogs.com/mangoyang/p/9302269 ...
- 多种方式实现依赖注入及使用注解定义bean
构造注入 如何给构造方法中的参数注入方法呢如下 首先bean代码如下 package cn.pojo; public class Greeting { /** * 说的话 */ private Str ...
- html5定位获取当前位置并在百度地图上显示
用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...
- Ubuntu设置代理上网
代理服务器(Proxy Server)是个人网络和Internet服务商之间的中间代理机构,它负责转发合法的网络信息,对转发进行控制和登记.代理服务器作为连接Internet(广域网)与Intrane ...
- 【PHP】判断变量是否为控
1. isset功能:判断变量是否被初始化 说明:它并不会判断变量是否为空,并且可以用来判断数组中元素是否被定义过注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_e ...
- JZOJ 1265. Round Numbers
1265. Round Numbers(rndnum.pas/c/cpp) (File IO): input:rndnum.in output:rndnum.out Time Limits: 1000 ...
- 第48课 thinkphp5添加商品库
目录 思路: 1. html页面里属性下拉框里的值是从goods_attr联attr里的查出来传到模板里的.在属性的下拉栏里展示出来 2. html页面里用二维数组的结构goods_attr[{$k} ...