记录编号 227880 评测结果 AAAAAAAAAA
题目名称 [HNOI 2015]亚瑟王 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 C++ 运行时间 6.709 s
提交时间 2016-02-18 21:31:03 内存使用 0.41 MiB
显示代码纯文本
#include<stdio.h>
#include<string.h>
int d[250];
double ans,p[250],f[250][150];
inline double POW(long double x,int y){
	double an=1;
	while(y){
		if(y&1) an*=x;
		y>>=1;
		x=x*x;
	}
	return an;
}
int main(){
	freopen("arthur.in","r",stdin);
	freopen("arthur.out","w",stdout);
	int T,n,r;scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&r);
		for(int i=1;i<=n;++i) scanf("%lf%d",&p[i],&d[i]);
		memset(f,0,sizeof(f));//清空!否则WA
		f[0][r]=1,ans=0;
		for(int i=1;i<=n;++i)
		    for(int j=1;j<=r;++j){
				f[i][j]=f[i-1][j]*POW(1-p[i-1],j)+f[i-1][j+1]*(1-POW(1-p[i-1],j+1));
				ans+=f[i][j]*(1-POW(1-p[i],j))*d[i];
			}
		printf("%.10lf\n",ans);
	}
	//while(1);
}