牛客练习赛26B 烟花 (概率DP)
链接:https://ac.nowcoder.com/acm/contest/180/B
来源:牛客网
烟花
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
题目描述
小a有nn个烟花,每个烟花代表着互不相同的颜色,对于第ii个烟花,它有p_ip
i
的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生kk种颜色的概率
输入描述:
第一行两个整数n,kn,k
接下来一行nn个数,第ii个数p_ip
i
表示第ii个烟花被点燃的概率
输出描述:
输出有两行
第一行表示产生不同颜色的期望个数
第二行表示产生恰好kk种颜色的概率
以换行符分割
示例1
输入
复制
3 2
0.5 0.25 0.75
输出
复制
1.5000
0.4062
说明
第二问样例解释:
(1, 2) :0.5 * 0.25 * (1 - 0.75) = 0.03125(1,2):0.5∗0.25∗(1−0.75)=0.03125
(1, 3): 0.5 * (1 - 0.25) * 0.75 = 0.28125(1,3):0.5∗(1−0.25)∗0.75=0.28125
(2, 3) :(1 - 0.5) * 0.25 * 0.75 = 0.09375(2,3):(1−0.5)∗0.25∗0.75=0.09375
相加得0.406250.40625
备注:
对于30 %30%的数据:n \leqslant 6, k \leqslant nn⩽6,k⩽n
对于100 %100%的数据:n \leqslant 10^5, k \leqslant 2 * 10^2n⩽10
5
,k⩽2∗10
2
输出均保留4位小数,若你的答案误差与std不超过10^{-4}10
−4
即为正确
题意:
思路:
因为每一个烟花对颜色个数的贡献是1 所以

第2个输出用概率dp来做,
定义dp状态 dp[i][j] 到第i个烟花是,已经燃放了j个烟花的概率。。
对于每一个烟花只有两个状态,点燃和不点燃,所以
当前 dp[i][j] = dp[i-1][j-1]a[i]+ dp[i-1][j](1.0000-a[i]) 即i-1个烟花只点燃了j-1个烟花的时,我在用a[i] 的概率去点燃当前第i个烟花,那么就是第i个烟花时点燃了 j 个烟花,
还有一个 就是 i个烟花时,就点燃了j个烟花,当前的烟花不点燃,就是第i个烟花时点燃了 j 个烟花, 加起来就是dp[i][j]
细节见代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=100010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
double a[maxn];
double dp[maxn][202];
int main()
{
//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);
gbtb;
cin>>n;
cin>>k;
repd(i,1,n)
{
cin>>a[i];
}
repd(i,1,n)
{
repd(j,1,i)
{
dp[i][j]+=dp[i-1][j-1]*a[i];
dp[i][j]+=dp[i-1][j]*(1.0000-a[i]);
}
}
cout<<fixed<<setprecison()
return 0;
}
inline void getInt(int* p) {
char ch;
do {
ch = getchar();
} while (ch == ' ' || ch == '\n');
if (ch == '-') {
*p = -(getchar() - '0');
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 - ch + '0';
}
}
else {
*p = ch - '0';
while ((ch = getchar()) >= '0' && ch <= '9') {
*p = *p * 10 + ch - '0';
}
}
}
牛客练习赛26B 烟花 (概率DP)的更多相关文章
- 牛客练习赛35-背单词-线性DP
背单词 思路 :dp[ i ] [ 0 ]表示 第i 位放的元音 dp[ i ] [ 1 ]表示 第i 位放的辅音 ,cnt [ i ]含义是 长度为 i 的方案数. 转移 :dp[ i ] ...
- 牛客练习赛55 E-树 树形DP
题意 你有一颗大小为\(n\)的树,点从\(1\)到\(n\)标号. 设\(dis(x,y)\)表示\(x\)到\(y\)的距离. 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}di ...
- 牛客练习赛53 A 超越学姐爱字符串 (DP)
牛客练习赛53 超越学姐爱字符串 链接:https://ac.nowcoder.com/acm/contest/1114/A来源:牛客网 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢" ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
随机推荐
- 代码实现:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.第二个完全数是28, //它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加, //编程找出1000以内的所有完数。
import java.util.ArrayList; import java.util.List; //一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3. ...
- Redis中存字段key出现 \xef \xbb \xbf
环境: java向redis中存数据用于重复判断,结果有一条记录居然去不了重复,用Redis DeskTop Manager 查看发现,有一个 key 中居然是这样的: 20190324157:\xE ...
- LoadRunner 技巧之 自动关联
LoadRunner 技巧之 自动关联 这一节讲loadunner 关联的问题,其实这个东西理解起来简单,但说起来比较麻烦. 关联的原理: ...
- sql 游标的关闭和释放
如果不关闭游标,就会 消息 ,级别 ,状态 ,过程 (过程名),第 xx 行 名为 'c1' 的游标已存在. 消息 ,级别 ,状态 ,过程 (过程名),第 xx 行 游标已打开. 如何关闭游标,其实和 ...
- java:LeakFilling(struts2)
1.mvc: 目的: 将展现和业务相分离. Model1:JSP+JavaBean Model2:MVC(JSP+Servlet+JavaBean) 优点: A.各司其职,互不干涉 B.有利于分工协作 ...
- string中getline,cin的方法getline(),get总结
一.string中的getline不是string的成员函数,属于全局函数,使用需要include<string>,有两个重载版本: 函数原型参见:http://www.cplusplus ...
- 【VS开发】【图像处理】 bayer, yuv, RGB转换方法
因为我的STVxxx USB camera输出格式是bayer格式,手头上只有YUVTOOLS这个查看工具,没法验证STVxxx在开发板上是否正常工作. 网上找了很久也没找到格式转换工具,最后放弃了, ...
- k8s-kubernettes-sercet存储
Secret Secret存在意义 Secret解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中.Secret可以以Volume或者环境变量的方 ...
- python 并发编程 多路复用IO模型
多路复用IO(IO multiplexing) 这种IO方式为事件驱动IO(event driven IO). 我们都知道,select/epoll的好处就在于单个进程process就可以同时处理多个 ...
- [BJWC2008] Gate Of Babylon
题目链接 容斥+隔板法+Lucas定理 #include <bits/stdc++.h> using namespace std; const int N=1e5+10; int n,m, ...