2020牛客寒假训练营2--C题

/*
首先,没有模意义下: 
用f[i,j]表示前i题做对j题的集合,值为概率
那么f[i,0] = f[i-1,0]*(1-pi)
    f[i,j] = f[i-1,j-1]*pi + f[i-1,j]*(1-pi)
那么在模意义下:
得到的全部概率都是对1e9+7取模得到的pi,即 b*p = a + k*(1e9+7)
那么(1-pi)对1e9+7取模, 就可以用(1-pi+mod)%mod 
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
ll mod = 1e9+7;
const int N = 2005;
ll p[N];
ll f[N][N];
int n;
int main(){
	scanf("%d",&n);
	for(int i = 1;i <= n;i++) scanf("%lld",p+i);
	f[0][0] = 1;
	for(int i = 1;i <= n;i++){
		f[i][0] = f[i-1][0]*(1-p[i]+mod)%mod;
		for(int j = 1;j <= n;j++){
			f[i][j] = (f[i-1][j-1]*p[i]%mod + f[i-1][j]*(1-p[i]+mod)%mod)%mod;
		}
	}
	for(int i = 0;i <= n;i++){
		printf("%lld ",f[n][i]);
	}
	return 0; 
}
发布了27 篇原创文章 · 获赞 0 · 访问量 339

猜你喜欢

转载自blog.csdn.net/weixin_44083561/article/details/104210769