• 山屋惊魂


    我太傻逼了打了13.5K

    思路很简单,代码很难

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    struct moo{
        ll opt1;//第一个
        ll xiaoyu,xiaoyudengyu,dayu,dayudengyu;
        ll opt2;//第二个
        ll val1;//第一个数
        ll val2;//第二个数
        ll wenhao;//有无问号
    }node[110];
    ll n;
    ll mit[10],spd[10],san[10],kno[10];
    double f[110][10][10][10][10],ans1[110],ans2[110],ans3[110],ans4[110],dice[30][75];
    ll needpan(ll x){
        if((!node[x].xiaoyu)&&(!node[x].dayu)&&(!node[x].xiaoyudengyu)&&(!node[x].dayudengyu))
            return 0;
        return 1;
    }
    char ch1[110],ch2[110],ch3[110],ch4[110];
    ll work(char c){
        if(c=='i') return 1;
        if(c=='p') return 2;
        if(c=='a') return 3;
        if(c=='n') return 4;
    }
    void cal(ll i,ll j1,ll j2,ll j3,ll j4,ll opt,ll val,double gailv){
    //    printf("**************opt=%lld
    ",opt);
        if(opt==1){
            if(j1+val<=0) return ;
            ll jj=j1+val;
            if(jj>8) jj=8;
            f[i+1][jj][j2][j3][j4]+=gailv*f[i][j1][j2][j3][j4];
        }
        else if(opt==2){
            if(j2+val<=0) return ;
            ll jj=j2+val;
            if(jj>8) jj=8;
            f[i+1][j1][jj][j3][j4]+=gailv*f[i][j1][j2][j3][j4];
        }
        else if(opt==3){
            if(j3+val<=0){
    //            printf("****
    ");
                return ;
            }
            ll jj=j3+val;
            if(jj>8) jj=8;
            f[i+1][j1][j2][jj][j4]+=gailv*f[i][j1][j2][j3][j4];
            
        }
        else{
            if(j4+val<=0){
    //            printf("******
    ");
                return ;
            }
            ll jj=j4+val;
            if(jj>8) jj=8;
            f[i+1][j1][j2][j3][jj]+=gailv*f[i][j1][j2][j3][j4];
    //        printf("f[%lld][%lld][%lld][%lld][%lld]=%lf
    ",i+1,j1,j2,j3,jj,f[i+1][j1][j2][j3][jj]);
        }    
    }
    int main(){
        ll ita,itb,itc,itd,a;
        scanf("%lld",&a);
        while(a){
            mit[++mit[0]]=a%10;
            a/=10;
        }
        scanf("%lld",&ita);
        scanf("%lld",&a);
        while(a){
            spd[++spd[0]]=a%10;
            a/=10;
        }
        scanf("%lld",&itb);
        scanf("%lld",&a);
        while(a){
            san[++san[0]]=a%10;
            a/=10;
        }
        scanf("%lld",&itc);
        scanf("%lld",&a);
        while(a){
            kno[++kno[0]]=a%10;
            a/=10;
        }
        scanf("%lld",&itd);
        scanf("%lld",&a);
        for(ll i=1;i<=a;i++){
            scanf("%s",ch1+1);
            node[i].opt1=work(ch1[2]);
            scanf("%s",ch2+1);
            if(ch2[1]=='+'||ch2[1]=='-'){
                ll x=0;
                ll it=2,f=1;
                if(ch2[1]=='-') f=-1;
                while(isdigit(ch2[it])){
                    x=x*10+ch2[it]-'0';
                    it++;
                }
                if(ch2[it]=='?'){
                    node[i].wenhao=1;
                }
                node[i].val1=x*f;
            }
            else {
                if(ch2[1]=='<'&&ch2[2]=='='){
                    node[i].xiaoyudengyu=1;
                }
                else if(ch2[1]=='<'){
                    node[i].xiaoyu=1;
                }
                else if(ch2[1]=='>'&&ch2[2]=='='){
                    node[i].dayudengyu=1;
                }
                else node[i].dayu=1;
                scanf("%lld",&node[i].val1);
                scanf("%s",ch3+1);
                node[i].opt2=work(ch3[2]);
                scanf("%s",ch2+1);
                ll x=0;
                ll it=2,f=1;
                if(ch2[1]=='-') f=-1;
                while(isdigit(ch2[it])){
                    x=x*10+ch2[it]-'0';
                    it++;
                }
                if(ch2[it]=='?'){
                    node[i].wenhao=1;
                }
                node[i].val2=x*f;
            }
        }
    //    for(ll i=1;i<=a;i++){
    //        printf("opt1=%lld opt2=%lld val1=%lld val2=%lld wenhao=%lld <%lld <=%lld >%lld >=%lld
    ",node[i].opt1,node[i].opt2,node[i].val1,node[i].val2,node[i].wenhao,node[i].xiaoyu,node[i].xiaoyudengyu,node[i].dayu,node[i].dayudengyu);
    //    }
        f[0][ita][itb][itc][itd]=100;
        dice[0][0]=1.0;
        for(ll i=0;i<=16;i++){
            for(ll j=0;j<=32;j++){
                dice[i+1][j+1]+=dice[i][j]*1.0/3.0;
                dice[i+1][j+2]+=dice[i][j]*1.0/3.0;
                dice[i+1][j]+=dice[i][j]*1.0/3.0;
            }
        }
    //    printf("ita=%lld itb=%lld itc=%lld itd=%lld************
    ",ita,itb,itc,itd);
    //    printf("****
    ");
        for(ll i=0;i<a;i++){
            for(ll j1=1;j1<=8;j1++)
                for(ll j2=1;j2<=8;j2++)
                    for(ll j3=1;j3<=8;j3++)
                        for(ll j4=1;j4<=8;j4++){
                            if(f[i][j1][j2][j3][j4]){
                                if(!needpan(i+1)){
                                    if(node[i+1].wenhao){
                                        ll cnt=abs(node[i+1].val1);
                                        ll opt,opt1;
                                        if(node[i+1].val1<0) opt=-1;
                                        else opt=1;
                                        double delt=1;
                                        opt1=node[i+1].opt1;
                                        for(ll j=0;j<=32;j++){
                                            if(!dice[cnt][j]) continue ;
                                            ll val=opt*j;
                                            cal(i,j1,j2,j3,j4,opt1,val,dice[cnt][j]);
                                        }
                                    }
                                    else {
                                        ll opt=node[i+1].opt1,val=node[i+1].val1;
                                        cal(i,j1,j2,j3,j4,opt,val,1.0);
                                    }
                                }
                                else {//void cal(ll i,ll j1,ll j2,ll j3,ll j4,ll opt,ll val,double gailv){
                                    ll opt1=node[i+1].opt1,opt2=node[i+1].opt2;
                                    ll val1=node[i+1].val1,val2=fabs(node[i+1].val2);
                                    ll opt;
                                    if(node[i+1].val2<0) opt=-1;
                                    else opt=1;
                                    if(node[i+1].xiaoyu){//<
                                        if(opt1==1){
                                            ll cnt1=mit[8-j1+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==2){
                                            ll cnt1=spd[8-j2+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==3){
                                            ll cnt1=san[8-j3+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
    //                                                        printf("%lf cnt1=%lld val2=%lld dice
    ",dice[cnt1][j]*dice[val2][q],cnt1,val2);
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
    //                                                        printf("f=%lf
    ",f[i+1][j1][j2][j3+opt*val2][j4]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==4){
                                            ll cnt1=kno[8-j4+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else if(node[i+1].dayu){
                                        if(opt1==1){
                                            ll cnt1=mit[8-j1+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==2){
                                            ll cnt1=spd[8-j2+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==3){
                                            ll cnt1=san[8-j3+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==4){
                                            ll cnt1=kno[8-j4+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<=val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else if(node[i+1].dayudengyu){
                                        if(opt1==1){
                                            ll cnt1=mit[8-j1+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==2){
                                            ll cnt1=spd[8-j2+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==3){
                                            ll cnt1=san[8-j3+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==4){
                                            ll cnt1=kno[8-j4+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j<val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else {
                                        if(opt1==1){
                                            ll cnt1=mit[8-j1+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==2){
                                            ll cnt1=spd[8-j2+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==3){
                                            ll cnt1=san[8-j3+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                        if(opt1==4){
                                            ll cnt1=kno[8-j4+1];
                                            for(ll j=0;j<=32;j++){
                                                if(j>val1)
                                                    f[i+1][j1][j2][j3][j4]+=dice[cnt1][j]*f[i][j1][j2][j3][j4];
                                                else {
                                                    if(node[i+1].wenhao){
                                                        for(ll q=0;q<=32;q++){
                                                            cal(i,j1,j2,j3,j4,opt2,opt*q,dice[cnt1][j]*dice[val2][q]);
                                                        }
                                                    }
                                                    else {
                                                        cal(i,j1,j2,j3,j4,opt2,opt*val2,dice[cnt1][j]);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
        }
        double ans=0;
        for(ll j1=1;j1<=8;j1++){
            for(ll j2=1;j2<=8;j2++){
                for(ll j3=1;j3<=8;j3++){
                    for(ll j4=1;j4<=8;j4++){
                        if(f[a][j1][j2][j3][j4]){
    //                        printf("f[%lld][%lld][%lld][%lld][%lld]=%lf
    ",a,j1,j2,j3,j4,f[a][j1][j2][j3][j4]);
                            ans1[mit[8-j1+1]]+=f[a][j1][j2][j3][j4];
                            ans2[spd[8-j2+1]]+=f[a][j1][j2][j3][j4];
                            ans3[san[8-j3+1]]+=f[a][j1][j2][j3][j4];
                            ans4[kno[8-j4+1]]+=f[a][j1][j2][j3][j4];
                        }
                    }
                }
            }
        }
        ans=0;
        for(ll i=1;i<=8;i++)
            ans+=ans1[i];
        printf("%.2lf
    ",fabs(100-ans));
        for(ll i=1;i<=8;i++)
            printf("%.2lf ",ans1[i]);
        puts("");
        for(ll i=1;i<=8;i++)
            printf("%.2lf ",ans2[i]);
        puts("");
        for(ll i=1;i<=8;i++)
            printf("%.2lf ",ans3[i]);
        puts("");
        for(ll i=1;i<=8;i++)
            printf("%.2lf ",ans4[i]);
        puts("");
    }
    View Code
  • 相关阅读:
    极大似然法估计
    概率统计
    打怪升级必备书单
    嵌入式运用的思路
    清华大学保研笔试题
    使用ffmpeg将海康视频rtsp转为hls
    Linux基础系统权限
    Ubuntu使用tzselect修改时区
    Apache mod_rewrite规则重写的标志说明
    Postgresql导出指定的数据表
  • 原文地址:https://www.cnblogs.com/znsbc-13/p/11743392.html
Copyright © 2020-2023  润新知