标签:str hide continue pen ons 暴力枚举 bool 图片 while
概率+暴力dfs
可以暴力枚举所有的状态,判断是否成立,对于每个状态,记录抽到这个状态的概率,如果能成功,就在答案上加上这个概率
#include <cstdio> #include <algorithm> #include<iostream> using namespace std; const int N=1e5+10; int t; int a[N]; int x[N]; double ans; int flag; int v[N]; int d[N]; int all; bool check(int u){ int i; for(i=0;i<3&&!flag;i++){ if(!v[i]){ if(d[i]==(x[u]+1)%3)//当前手牌被击败,换一张 continue; if(d[i]==x[u]-1){//两个人的手牌相等,可以考虑递归检验,如果以当前为首位不行,才换一张 v[i]=1; check(u+1); v[i]=0; } else{//直接击败 flag=1; return true; } } } return false; } void dfs(int u,double P){ if(u==3){ flag=0; check(0); if(flag) ans+=P; return ; } for(int i=0;i<3;i++){ if(!a[i]) continue; a[i]--; d[u]=i; dfs(u+1,P*(a[i]+1)/(all-u)); a[i]++; } } int main() { cin>>t; while(t--){ cin>>a[0]>>a[1]>>a[2]>>x[0]>>x[1]>>x[2]; all=a[0]+a[1]+a[2]; ans=0; dfs(0,1); printf("%.2f\n",ans); } }
标签:str hide continue pen ons 暴力枚举 bool 图片 while
原文地址:https://www.cnblogs.com/ctyakwf/p/13251456.html