骰子游戏有没有可能爆精度?
  • 板块学术版
  • 楼主LargeRice16pro
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/8/25 10:17
  • 上次更新2023/10/27 13:46:22
查看原帖
骰子游戏有没有可能爆精度?
225100
LargeRice16pro楼主2022/8/25 10:17

A,B\text{A,B} 两个人分别有 n,mn,m 的血量,每轮都扔筛子,点数小的扣一滴血。某人的血量扣到 00 就输了。已知两个人扔出每个点的概率。求最后 A\text{A} 赢的概率。

很显然我们计算出两个人点数小的概率为 x,yx,y,然后递推就行。初始化 f[i][0]=1.0

wa

#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=1e3+10;
int n,m;
db x,y,ans,a[N],b[N],suma[N],sumb[N],f[N][N],e=1.0;
int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
int main(){
	int i,j;
	n=read();m=read();
	for(i=1;i<=6;i++) cin>>a[i];
	for(i=1;i<=6;i++) cin>>b[i];
	for(i=1;i<=6;i++) suma[i]=suma[i-1]+a[i];
	for(i=1;i<=6;i++) sumb[i]=sumb[i-1]+b[i];
	for(i=1;i<=6;i++) y+=(a[i]*sumb[i-1]);
	for(i=1;i<=6;i++) x+=(b[i]*suma[i-1]);
	for(i=1;i<=n;i++) f[i][0]=1.0;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			f[i][j]+=f[i-1][j]*x;
			f[i][j]+=f[i][j-1]*y;
		}
	}
	ans=f[n][m];
	printf("%.6f\n",ans);
	return 0;
}


2022/8/25 10:17
加载中...