LightOJ 1274 Beating the Dataset 组合/期望DP
Beating the Dataset LightOJ - 1274
有 个文件,每个文件里面包含 或者 ,前者 3 bytes,后者 2 bytes,并且知道这些文件的总大小 。
现在定义自己的输出,第 个输出为 ,第 个输出为第 个文件中包含的内容,也就是说,假如 个文件中分别包含字符串为 ,那么自己的输出就是 ,其中 为 。
问自己的输出和给定的文件平均会有多少个不一样?
我觉得这道题还是挺难的…
首先根据 和 就可以分别计算出 和 的个数,问题就可以转化为 个 和 个 组成一个 串,问这个串的全排列其中一个位置与前一个位置不同或者第一位为 的期望。
首先认为这些 是互异的,那么总的方案数有 种,把 看成一个数字,形成的排列个数有 种,而 本身又有 种, 可以交换变成 ,那么相当于有 种;把 放在首位有 种,后面随便排列,有 种,因此期望为:
代码如下:
#include<iostream>
#include<cstdio>
//#define WINE
using namespace std;
int T,iCase,n,s,x,y;
int main(){
#ifdef WINE
freopen("data.in","r",stdin);
#endif
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&s);
y=s-2*n;x=n-y;
printf("Case %d: %.8lf\n",++iCase,(2.0*x*y+x)/n);
}
return 0;
}