LightOJ 1274 Beating the Dataset

题意是一个人做ACM题,这道题的数据的字节数和提问数已经给出,答案只有YES或NO。那个人做不来这道题,只能蒙,一开始一定蒙YES,数据会告诉你蒙对了没有,之后蒙的都是之前的正确答案,求蒙错的数据组数的期望数量。

因为字节数和提问数已经给出,所以立方程组可以算出来YES和NO的个数,设为X,Y。题目可以抽象为某个01串全排列该位置与前一个位置不同或者第一位为0的数量期望。

每个1贡献的期望是各个0在它前面或者后面两种所以是2 * X * Y,每个0额外贡献了处在第一位期望也就是Y。

所以得出公式(2 * X * Y + Y) / (X + Y)。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int t;
    scanf("%d", &t);
    int cas = 0;
    while(t--) {
        int n, s;
        scanf("%d %d", &n, &s);
        double x = s - 2 * n, y = n - x;
        double ans = 0;
        ans = (2.0 * x * y + y) / (double) n;
        printf("Case %d: %.7lf\n", ++cas, ans);
    }
}

 

posted @ 2016-08-07 17:04  MartinEden  阅读(898)  评论(0编辑  收藏  举报