码迷,mamicode.com
首页 > 其他好文 > 详细

TopCoder-SRM637-DIV1-250pt-GreaterGame-集合+概率

时间:2014-10-24 01:43:01      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   for   sp   div   log   amp   bs   

首先容易想到的是把那些已知的轮次尽可能的赢下来。对于已知但赢不下来的,可以放上当前最小的牌,这样能使期望最大。

然后就得到了我们当前的一手牌,和他们当前的一手牌。在已知牌的数字,但是不知牌的顺序的情况下,求得分的期望。

一开始试图用递归的方法去做,发现没办法很好的归纳出已经用了那些牌还剩那些牌。

最后猜测了一种方案,竟然有效:

枚举所有我们的牌和他们的牌,两个一组比较大小。最后用我们大于他们的个数除以总的比较次数,这样得到的结果作为概率,乘上这些剩下的牌数作为期望。再加上必胜的那些牌,就得到了正确答案。

我也不知这个如何证明,且等答案吧。

int n,m;
class GreaterGame
{
        public:
        vector<int> h;
        vector<int> so;
        vector<bool> som;
        vector<bool> sum;
        double calc(vector <int> hand, vector <int> sothe)
        {
            h=hand;so=sothe;
            n=h.size();
            som.resize(MAX_N*2+1,0);
            sum.resize(MAX_N*2+1,0);
            for(int i=0;i<n;i++){
                sum[h[i]-1]=1;
            }
            for(int i=0;i<2*n;i++){
                if(!sum[i]) som[i]=1;
            }
            int mustWin=0;
            int known=0;
            for(int i=0;i<n;i++){
                if(so[i]!=-1){
                    known++;
                    int sun=so[i]-1;
                    bool found=false;
                    som[sun]=false;
                    for(int j=sun+1;j<2*n;j++){
                        if (sum[j]) {
                            sum[j]=false;
                            mustWin++;
                            found=true;
                            break;
                        }
                    }
                    if (!found){
                        for(int j=0;j<2*n;j++){
                            if (sum[j]) {
                                sum[j]=false;
                                break;
                            }
                        }
                    }
                }
            }
            int x=0,y=0;
            for(int i=0;i<2*n;i++) for(int j=0;j<2*n;j++){
                if (sum[i] &&som[j]){
                    if (i>j) x++;
                    y++;
                }
            }
            if ((n-known)==0) return mustWin;
            return (double(x)/double(y))*(n-known)+mustWin;
        }
};

 

TopCoder-SRM637-DIV1-250pt-GreaterGame-集合+概率

标签:style   blog   color   for   sp   div   log   amp   bs   

原文地址:http://www.cnblogs.com/yangsc/p/4047271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!