首页 > 其他分享 >UVA557 Burger 题解

UVA557 Burger 题解

时间:2024-03-22 13:23:52浏览次数:21  
标签:frac 题解 i2 times Burger UVA557 choose 2m 2i

UVA557 Burger

题目大意

称一个长度为 \(n\) 的01串是好的,当且仅当 \(0\) 和 \(1\) 在该串中分别出现恰好 \(\frac n2\) 次,且该串的最后两位相同。

现给定 \(n\)(\(n\) 为偶数),求 该串是好的 的概率。

Solve

正难则反,考虑求出最后两位不同的概率。

令 \(m=\frac n2\),那么条件“最后两位不同”等价于前 \(2m-2\) 位中,有 \(m-1\) 个 \(0\) 和 \(1\)。

显然该串满足此条件的概率是:

\[P_n=\frac{{2m-2}\choose{m-1}}{2^{2m-2}}=\frac{{n-2}\choose{\frac n2-1}}{2^{n-2}} \]

即从前 \(2m-2\) 位中选出 \(m-1\) 位令其为 \(0\) 的方案数除以总方案数。而每一位上是 \(0\) 或 \(1\) 有两种选择,所以共有 \(2^{2m-2}\) 种方案。

所以最后的答案就是 \(1-P\) 了。

然后考虑怎么求组合数,显然不能利用递推求,时间和空间上都过不去,而用阶乘和逆元的话,我不会。

考虑手推个递推式,因为我们发现只需求 \(2i\choose i\),显然不难推。

\[\begin{align} {2i\choose i}&=\frac{(2i)!}{i!\times i!}=\frac{2i\times(2i-1)\times\dots\times(i+1)}{i!}\\ \\\\ {2i+2\choose i+1}&=\frac{(2i+2)!}{(i+1)!\times (i+1)!}\\ &=\frac{(2i+2)\times(2i+1)\times\dots\times(i+2)}{(i+1)!}\\ &=(2i+2)\times(2i+1)\times\frac{2i\times(2i-1)\times\dots\times(i+1)}{(i+1)\times(i+1)!}\\ &=(2i+2)\times(2i+1)\times\frac{{2i\choose i}\times i!}{(i+1)\times(i+1)!}\\ &=2\times(2i+1)\times\frac{2i\choose i}{i+1}\quad ((2i+2)约掉(i+2)剩2,i!约掉(i+1)!剩(i+1))\\ 即:\\ {2i\choose i}&=2\times(2i-1)\times\frac{2i-2\choose i-1}{i}\\ 即:\\ {i\choose \frac i2}&=2\times(i-1)\times\frac{i-2\choose \frac i2-1}{\frac i2}=4\times(i-1)\times\frac{i-2\choose \frac i2-1}i\\\\ 将{i-2\choose \frac i2-1}代入得P_i&=\frac{{i-2}\choose{\frac i2-1}}{2^{i-2}}\\ 将{i\choose \frac i2}代入得P_{i+2}=\frac{i\choose \frac i2}{2^i}&=4\times(i-1)\times\frac{i-2\choose \frac i2-1}i\div2^i\\ &=4\times(i-1)\times\frac{i-2\choose \frac i2-1}{2^i}\div i\\ &=(i-1)\times\frac{i-2\choose \frac i2-1}{2^{i-2}}\div i\\ &=P_i\times(i-1)\div i\\ 即:\\ P_i&=P_{i-2}\times(i-1)\div i \end{align} \]

代码就很简单了。

Code

#include<bits/stdc++.h>
#pragma GCC optimize(1,2,3,"Ofast","inline")
using namespace std;
#define int long long
inline int read()
{
	short f=1;
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')	{if(c=='-')	f=-1;c=getchar();}
	while(c>='0'&&c<='9')	x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
int t,n,mi,m;
double ans[100010]={1}/*C(i/2,i)*/;
signed main()
{
	for(int i=2;i<=100000;i+=2)
		ans[i]=ans[i-2]*(i-1)/i;
	t=read();
	for(int i=1;i<=t;i=-~i)
		printf("%.4lf\n",1-ans[read()-2]);
	return 0;
}

标签:frac,题解,i2,times,Burger,UVA557,choose,2m,2i
From: https://www.cnblogs.com/sorato/p/18088357

相关文章

  • 一次性搞定!思源字体安装、使用及常见问题解答
    环境Windows11Pro23H2Microsoft365Word2402思源宋体:v2.002思源黑体:v2.0041.结论本人非专业字体工作者,个人建议,仅供参考;先说结论,链接以及详细说明见后文安装SC版本,无其余后缀HW,VF,CN等关于HW,思源宋体没有HW版本,个人实测,非HW版本,英文数字采用比例......
  • AcWing 1230. K倍区间 C++满分题解
    原题链接https://www.acwing.com/problem/content/1232/题目分析求区间和,我们可以通过前缀和来求出。我们规定sum[i]表示第1个元素到第i个元素的和。那么sum[r]-sum[l-1]就是区间[l,r]的和。一维前缀和for(inti=1;i<=n;i++){scanf("%lld",&sum[i]);......
  • cfRound935div3--DEFG题解
    ps:这场因为精神状态不佳,又C题题意有点绕,卡题了,头晕找不到错.最后做了两题就溜了.狠狠扣90分..D-SeraphimtheOwl题意:即选一个位置,使得其满足题意。而且在满足题意的基础上,要靠近中心越好,如果满足题意而且靠近中心的距离一样,那么输出前面那个.intcnt0[300005]={0};......
  • P5664 [CSP-S2019] Emiya 家今天的饭 题解
    题目链接:P5664[CSP-S2019]Emiya家今天的饭思路:显然可以算出总数减去不合法的,不合法即有一列超过一半,显然最多一列,枚举这一列。考虑dp,设\(f(i,j,k)\)表示前\(i\)个方法,\(j\)个这一列,\(k\)个其他列。但是这样是\(O(n^3m)\),我们需要优化。显然我们只关心\(j,k\)相......
  • [CF845G] Shortest Path Problem? 题解
    [CF845G]ShortestPathProblem?题解注意到如果我们在路径中多走了一个环,那么得到的贡献就是这个环的贡献。对于这种有关环的问题,考虑一棵生成树,这样所有环都可以用一条祖先边和一些树边组成,发现选环走的过程是独立的,考虑把所有环的权值丢进线性基里,然后查询xordist[1]^xor......
  • 20240321每日一题题解
    20240321每日一题题解Problem已知\(f(x,n)=\sqrt{n+\sqrt{(n-1)+\sqrt{(n-2)+\sqrt{...+2+\sqrt{1+x}}}}}\)。计算\(f\)的值。输入\(x\)和\(n\)​。输出这个函数值,并且注意需要保留两位小数。例如,输入4.210,则应该输出3.68Solution递归?循环?说实话这道题是有一定思考......
  • P1017 [NOIP2000 提高组] 进制转换题解
    题目我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所处位置为指数,以10为底数的幂之和的形式。例如123可表示为1×102+2×101+3×100这样的形式。与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置为指数,以2为底数的幂之......
  • CF1945E Binary Search 题解
    CF1945EBinarySearch题目大意给定一个\(1\simn\)的排列\(A\)(不保证有序),对这个排列用如下代码片段二分,查找\(m\)的位置。intl=1,r=n+1;while(r-l>1){intmid=(l+r)/2;if(A[mid]<=m) l=mid;else r=mid;}cout<<l;显然不一定能查找到正确位置,所以在......
  • 题解 P5809【【模板】多项式复合逆】
    \(\text{Link}\)力求把最新技术翻译地人人都能看懂。推荐先学习:拉格朗日反演。题意给出\(n\)次多项式\(F(x)\),求一个\(n\)次多项式\(G(x)\)满足\(F(G(x))\equivx(\bmodx^{n+1})\)。保证\([x^0]F(x)=0\)且\([x^1]F(x)\ne0\)。\(n\le2\times10^4\)。思路我们......
  • 20240320每日一题题解
    20240320每日一题题解Problem阿克曼(Ackermann)函数\(A(m,n)\)中,\(m,n\)定义域是非负整数(\(m\le3\),\(n\le10\)),函数值定义为:\(\mathit{akm}(m,n)=n+1\);(\(m=0\)时)。\(\mathit{akm}(m,n)=\mathit{akm}(m-1,1)\);(\(m>0\)、\(n=0\)时)。\(\mathit{akm}(m,n)=......