T2回家(home)

现在啥也不是了,虽然会了逆元,但是对期望概率题还是一窍不通,赛时相当于只推出了 \(n=1\) 的情况,结果运用到所有情况,理所应当只有20分。

题目描述

小Z是个路痴。有一天小Z迷路了,此时小Z到家有NN个单位长度。小Z可以进行若干次行动,每次行动小Z有 \(\frac 1 2\) 的概率向家靠近一个单位长度,有 \(\frac 1 2\) 的概率向家远离一个单位长度。由于小Z的体力是有限的,他最多能行动 \(K\) 次。请你帮帮可怜的小Z算一算,他在体力耗尽之前到达家中的概率是多少。

首先我们要来理解卡特兰数(八百年没用过了)


卡特兰数

标准例题:

  1. 有 \(2n\) 个人排成一行进入剧场。入场费5元。其中只有 \(n\) 个人有一张5元的钞票,另外 \(n\) 个人只有10元钞票,问有多少种方法使得剧院不需要额外钞票来找零?
  2. 对角线不相交的情况下,将一个多边形分成三角形区域的方案数。

下面讲解如何推导卡特兰数:

总方案数为 \(C_{2n}^n\) ,考虑排除不合法的方案。

对于每一种不合法的方案(称为 \(A\) ),我们找到第一个前缀和小于 \(0\) 的位置,此时必定

\(−1\) 比 \(1\) 多一个,我们将此前缀取反,可以得到一个含有 \(n+1\) 个 \(1\) 的序列(称为 \(B\) )。

结论:所有含 \(n+1\) 个 1 的长度为 \(2n\) 的序列正好与所有的不合法解一一对应。

首先每个 \(A\) 只有唯一的最先满足前缀和小于 \(0\) 的位置,\(B\) 同理,所以每个 \(A\) 只能产生一

个 \(B\),每个 \(B\) 也只能产生一个 \(A\),得证。

不合法方案数刚好为 \(B\) 的总数,即 \(C_{2n}^{n-1}\)

所以合法方案数即为 \(C_{2n}^n-C_{2n}^{n-1}\)


回到这道题里我们逆向思考,从家走到当前小Z的位置,可知第一步一定朝小Z走,其次整个过程中都不可能再次越过家,也就是说向靠近家的方向走的步数必须严格小于向小Z方向走的步数。

怎么样?是不是很类似卡特兰数?

如果我们要走 \(j\) 步(当然 \(j\) 要大于 \(n\),不然走不到),那么总方案是是 \(C_{j}^{n}-C_j^{n+1}\)。

然后枚举一下 \(j\),统计答案就行了。

但是,按照这个方法做出来你会惊人的发现是错的,没错,是错的

我们再思考,很轻松就能发现向小Z方向走的步数并不是 \(n\),而是 \(n+(j-n)/2\),因为多的步数是走来回。

我们再深一步思考,发现这并不是一个卡特兰数,因为在走向小Z的途中,是不能回到家中的,如果我们设向小Z走为 \(1\),反向走为 \(-1\),那么在行进过程中,值是不能为 \(0\) 的,必须大于 \(0\),大于等于 \(1\),考虑把一移到等式左边,感性理解就是第一步必须向小Z走,去掉这一步便是卡特兰数。

所以,最后的式子长这样:

\[C_{j-1}^{n-1+(j-n)/2}-C_{j-1}^{n-1+(j-n)/2+1}
\]

AC 代码(不开long long见祖宗):

#include<bits/stdc++.h>
using namespace std;
#define mod 998244353
#define N 5000010
#define int long long
int n,k,inv[N],fac[N],e[N];
int ans=0; long long quick_power(long long a,long long b){
long long sum=1;
while(b!=0){
if(b&1){
sum=(sum*a)%mod;
}
a=(a*a)%mod;
b=b>>1;
}
return sum;
} void get_fac(){
fac[1]=1;
for(int i=2;i<=k;i++){
fac[i]=fac[i-1]*i%mod;
}
} void get_inv(){
inv[0]=1;
inv[k]=quick_power(fac[k],mod-2);
for(int i=k-1;i>=1;i--){
inv[i]=inv[i+1]*(i+1)%mod;
}
} int C(int n,int m){
return (long long)fac[n]*inv[m]%mod*inv[n-m]%mod;
} signed main(){
freopen("home.in","r",stdin);
freopen("home.out","w",stdout);
scanf("%lld%lld",&n,&k);
if(k<n){
printf("0");
return 0;
}
get_fac();
get_inv();
e[0]=1;
for(int i=1;i<=k;i++){
e[i]=e[i-1]*inv[2]%mod;
}
ans=quick_power(inv[2],n)%mod;
for(int i=n+2;i<=k;i+=2){
long long temp=(mod+C(i-1,n-1+(i-n)/2)-C(i-1,n+(i-n)/2));
temp=(temp*e[i])%mod;
ans=(ans+temp)%mod;
}
printf("%lld\n",ans);
return 0;
}

T2回家(home)题解的更多相关文章

  1. 201800624模拟赛T2——回家路上

    题目描述 很多学生都抱怨浪费在回家路上的时间太长.这天dongdong刚走出学校大门,就听说某段路在施工(但不知道是哪条路),有可能导致他回家的时间会变长. Dongdong给出了一张地图,图中标号为 ...

  2. T2 监考老师 题解

    第二题,他并不是多难的算法.甚至连搜索都不用,他的题目要求和数据断定了他第二题的地位. 在一个大试场里,有 n 行 m 列的考生,小王和众多同学正在考试,这时,有一部分考生 作弊,当然,监考老师能发现 ...

  3. NOIP2020 T2 字符串匹配题解

    首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...

  4. NOIP 模拟赛 day5 T2 水 故事题解

    题目描述 有一块矩形土地被划分成 \(\small n×m\) 个正方形小块.这些小块高低不平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个方向的四块地中,但是不能直接流入对角相连的小块中 ...

  5. noip模拟7[匹配·回家·寿司]

    这次考试状态好像还是没有回来,只拿了55pts,还全是第一题的功劳,就是一个小KMP,然后还让我给打错了 就很难受,while打成了if,然后wa掉45分考完立马拿回来了,悔死了,害 第二题爆零了,为 ...

  6. 2016-5-19模拟测试 bzoj3652 bzoj3653 bzoj3654

    T1 description 给定正整数\(n\),定义\(f(x) = \max{y \ \mathrm{xor}\ x}(y<n)\) \(x\)在\([0,n)\)随机取值,求\(f(x) ...

  7. noip 提高组 2010

    T1:机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英 ...

  8. 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!

    前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...

  9. NOIP模拟赛(洛谷11月月赛)

    T1  终于结束的起点 题解:枚举啊... 斐波那契数 第46个爆int,第92个爆long long.... 发现结果一般是m的几倍左右....不用担心T. #include<iostream ...

  10. 洛谷U14667 肝活动【比赛】 【状压dp】

    题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...

随机推荐

  1. 【JavaScript高级02】JavaScript第一大神兽:原型和原型链

    1,函数中的prototype属性 每个函数都会有一个属性prototy,该属性默认指向一个空Object对象,而这个空的Object对象被称之为原型对象. <script > conso ...

  2. P1081 [NOIP2012 提高组] 开车旅行

    思路: 首先令 \(nxt1_i\) 表示右侧最近的城市距离(\(id1_i\) 为编号),令 \(nxt2_i\) 表示右侧第二近的城市编号(\(id2_i\) 为编号):可以使用 set 找出离这 ...

  3. 【Spring-Security】Re09 CSFR处理

    一.CSRF: CSRF 全称 Cross Site Request Forgery 跨站请求伪造 又称为OneClick Attack & SessionRiding 是非法请求访问,通过伪 ...

  4. nginx+tomcat部署均衡+虚拟IP配置

    一.配置java环境 更新数据源 sudo apt update 安装java sudo apt install openjdk-java-8-jdk 查看是否安装成功 java -version 二 ...

  5. 顶级围棋AI被发现漏洞:“超人类人工智能”还有很长的路?

    原文地址: https://www.bjnews.com.cn/detail/1720537986168936.html 参考资料: (1)Can AI be superhuman? Flaws in ...

  6. 强化学习分布式经验回放框架(experience replay)reverb的安装

    框架reverb的相关介绍: https://www.cnblogs.com/devilmaycry812839668/p/16260799.html ======================== ...

  7. ollama安装和运行llama3.1 8b

    ollama安装和运行llama3.1 8b conda create -n ollama python=3.11 -y conda activate ollama curl -fsSL https: ...

  8. 9组-Beta冲刺-总结

    一.基本情况 组长博客链接:9组-Beta冲刺-总结 现场答辩总结:本次答辩,我们演示了我们到Beta冲刺周结束时的成果展示,离目标还有一些距离,不过本次答辩完成了任务,总体来说还不错,希望下次最终答 ...

  9. inline,static inline

    https://blog.csdn.net/A_BCDEF_/article/details/89485894 inline 函数被调用时,需要出栈入栈.当函数频繁被调用时,则不断地有函数出栈入栈,会 ...

  10. 树莓派CM4(二): UART/IIC/SPI调试

    1. 参考资料 资料汇总页面 https://shumeipai.nxez.com/raspberry-pi-datasheets <bcm2711-peripherals.pdf>,下载 ...