宁波多校 B题 狂赌之渊(dfs+概率)

Posted ctyakwf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宁波多校 B题 狂赌之渊(dfs+概率)相关的知识,希望对你有一定的参考价值。

概率+暴力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
",ans);
    }
}
View Code

 

以上是关于宁波多校 B题 狂赌之渊(dfs+概率)的主要内容,如果未能解决你的问题,请参考以下文章

宁波多校 B题 七彩魔法树(线段树)

宁波多校 D题 树上的点到链(lca)

逛吃米兰 | 米兰漫画看哪里??__SUPERGULP

宁波多校 E题 ddd的逛街计划(Easy Version)

宁波多校 D题 COLORS的字符串挑战(线段树+hash+二分)

宁波多校 C石头划分(二分)