题意是一个人做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);
}
}
转载于:https://www.cnblogs.com/lonewanderer/p/5746649.html