UVA557 Burger 题解
UVA557 Burger
题目大意#
称一个长度为 的01串是好的,当且仅当 和 在该串中分别出现恰好 次,且该串的最后两位相同。
现给定 ( 为偶数),求 该串是好的 的概率。
Solve#
正难则反,考虑求出最后两位不同的概率。
令 ,那么条件“最后两位不同”等价于前 位中,有 个 和 。
显然该串满足此条件的概率是:
即从前 位中选出 位令其为 的方案数除以总方案数。而每一位上是 或 有两种选择,所以共有 种方案。
所以最后的答案就是 了。
然后考虑怎么求组合数,显然不能利用递推求,时间和空间上都过不去,而用阶乘和逆元的话,我不会。
考虑手推个递推式,因为我们发现只需求 ,显然不难推。
代码就很简单了。
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探