zoukankan      html  css  js  c++  java
  • 2018 徐州网络赛 C

    •  262144K
     

    Morgana is playing a game called cacti lottery. In this game, morgana has a 3 imes 33×3 grid graph, and the graph is filled with 11 ~ 99 , each number appears only once. The game is interesting, he doesn't know some numbers, but there are also some numbers he knows but don't want to tell you.

    Now he should choose three grids, these three grids should be in the same column or in the same row or in the diagonal line. Only after this choice, can he know all numbers in the grid graph. Then he sums the three numbers in the grids he chooses, get the reward as follows:

    SumReward
    6 10000
    7 36
    8 720
    9 360
    10 80
    11 252
    12 108
    13 72
    14 54
    15 180
    16 72
    17 180
    18 119
    19 36
    20 360
    21 1080
    22 144
    23 1800
    24 3600

    Then he wants you to predict the expected reward he will get if he is clever enough in the condition that he doesn't want to tell you something he knows.

    ("He is clever enough" means he will choose the max expected reward row or column or dianonal in the condition that he knows some numbers. And you know that he knows some number, but you don't know what they are exactly. So you should predict his expected reward in your opinion. )

    Input

    First line contains one integers TT (T le 100T100) represents the number of test cases.

    Then each cases contains three lines, giving the 3 imes 33×3 grid graph. '*' means Morgana knows but doesn't want to tell you, '#' means Morgana doesn't know, '0' ~ '9' means the public number that Morgana and you both know.

    Output

    TT lines, output the answer. If the answer is AA, and your answer is BB. Your answer will be considered as correct if and only if |(A-B)| < 1e-5(AB)<1e5 .

    本题答案不唯一,符合要求的答案均正确

    样例输入

    2
    123
    ***
    ###
    12*
    45#
    78#

    样例输出

    10000
    4313.16666667

    题目来源

    ACM-ICPC 2018 徐州赛区网络预赛

     

    枚举 * 的情况,对于每种情况搜索 # 的情况,答案和的平均值即为期望。

    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=25;
    typedef long long ll;
    int score[25]={0,0,0,0,0,0,10000,36,720,360,80,252,108,72,54,180,72,180,119,36,360,1080,144,1800,3600};
    int G[8][3]={
        {0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}
    };
    char mp[4][4];
    int fac[maxn],p[maxn],g[maxn],pn=0,pg[maxn],pgg[maxn];
    bool vis[maxn];
    int cnt,q;
    double res[maxn]; 
    double ans;
    void check(){
        for (int i=0; i<8; i++) res[i]=0;
        int a=0,b=0,c=0;
        for (int i=1; i<=9; i++){
            if(vis[i]) continue;
            pgg[c++]=i;
        }
        do{
            a=0,b=0;
            for (int i=0; i<pn; i++){
                if(p[i]>0) g[i]=p[i];
                else if(p[i]==0) g[i]=pg[a++];
                else g[i]=pgg[b++]; 
            }
            for (int d,i=0; i<8; i++){
                d=0;
                for (int j=0; j<3; j++) d+=g[G[i][j]];
                res[i]+=score[d];
            }
        }while(next_permutation(pgg,pgg+c));
        double d=0;
        for (int i=0; i<8; i++){
            res[i]=1.0*res[i]/fac[c];
            d=max(d,res[i]);
        }
        ans+=d;
    }
    void dfs(int pos){
        if(pos==cnt){
            q++;
            check();
            return;
        }
        for (int i=1; i<=9; i++){
            if(vis[i]) continue;
            vis[i]=1;
            pg[pos]=i;
            dfs(pos+1);
            vis[i]=false;
        }
    }
    int main(){
        // freopen("in.txt","r",stdin);
        fac[0]=1;
        for (int i=1; i<=9; i++) 
            fac[i]=fac[i-1]*i;
        int _;
        for (scanf("%d",&_); _; _--){
            cnt=q=0,ans=0;
            memset(vis,false,sizeof(vis));
            pn=0;
            for (int i=0; i<3; i++){
                scanf("%s",mp[i]);
                for (int j=0; j<3; j++){
                    if(mp[i][j]=='*') cnt++,p[pn++]=0;
                    else if(mp[i][j]=='#') p[pn++]=-1;
                    else p[pn++]=mp[i][j]-'0',vis[mp[i][j]-'0']=1; 
                }
            }
            dfs(0);
            ans=1.0*ans/q;
            printf("%.7f
    ",ans);
        }     
        return 0;
    }
    View Code
  • 相关阅读:
    Caliburn Micro 框架 WP8使用研究(二)页面导航
    Windows Phone 8 Fast Resume 快速恢复浅析(二)
    Caliburn Micro 框架 WP8使用研究(一)简介
    当BI迈入云端,分析云为我们带来了什么?
    解读SQL Server 2012中的最新BI功能
    一个典型的BI系统介绍
    SQL Server数据库服务器的负载均衡集群实现方法
    Web数据挖掘在电子商务中的应用
    2012商业智能发展趋势预测
    一个商业智能培训经理眼中的商业智能
  • 原文地址:https://www.cnblogs.com/acerkoo/p/9638076.html
Copyright © 2011-2022 走看看