T2回家(home)题解
T2回家(home)
现在啥也不是了,虽然会了逆元,但是对期望概率题还是一窍不通,赛时相当于只推出了 \(n=1\) 的情况,结果运用到所有情况,理所应当只有20分。
题目描述
小Z是个路痴。有一天小Z迷路了,此时小Z到家有NN个单位长度。小Z可以进行若干次行动,每次行动小Z有 \(\frac 1 2\) 的概率向家靠近一个单位长度,有 \(\frac 1 2\) 的概率向家远离一个单位长度。由于小Z的体力是有限的,他最多能行动 \(K\) 次。请你帮帮可怜的小Z算一算,他在体力耗尽之前到达家中的概率是多少。
首先我们要来理解卡特兰数(八百年没用过了)
卡特兰数
标准例题:
- 有 \(2n\) 个人排成一行进入剧场。入场费5元。其中只有 \(n\) 个人有一张5元的钞票,另外 \(n\) 个人只有10元钞票,问有多少种方法使得剧院不需要额外钞票来找零?
- 对角线不相交的情况下,将一个多边形分成三角形区域的方案数。
下面讲解如何推导卡特兰数:
总方案数为 \(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走,去掉这一步便是卡特兰数。
所以,最后的式子长这样:
\]
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)题解的更多相关文章
- 201800624模拟赛T2——回家路上
题目描述 很多学生都抱怨浪费在回家路上的时间太长.这天dongdong刚走出学校大门,就听说某段路在施工(但不知道是哪条路),有可能导致他回家的时间会变长. Dongdong给出了一张地图,图中标号为 ...
- T2 监考老师 题解
第二题,他并不是多难的算法.甚至连搜索都不用,他的题目要求和数据断定了他第二题的地位. 在一个大试场里,有 n 行 m 列的考生,小王和众多同学正在考试,这时,有一部分考生 作弊,当然,监考老师能发现 ...
- NOIP2020 T2 字符串匹配题解
首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...
- NOIP 模拟赛 day5 T2 水 故事题解
题目描述 有一块矩形土地被划分成 \(\small n×m\) 个正方形小块.这些小块高低不平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个方向的四块地中,但是不能直接流入对角相连的小块中 ...
- noip模拟7[匹配·回家·寿司]
这次考试状态好像还是没有回来,只拿了55pts,还全是第一题的功劳,就是一个小KMP,然后还让我给打错了 就很难受,while打成了if,然后wa掉45分考完立马拿回来了,悔死了,害 第二题爆零了,为 ...
- 2016-5-19模拟测试 bzoj3652 bzoj3653 bzoj3654
T1 description 给定正整数\(n\),定义\(f(x) = \max{y \ \mathrm{xor}\ x}(y<n)\) \(x\)在\([0,n)\)随机取值,求\(f(x) ...
- noip 提高组 2010
T1:机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英 ...
- 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!
前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...
- NOIP模拟赛(洛谷11月月赛)
T1 终于结束的起点 题解:枚举啊... 斐波那契数 第46个爆int,第92个爆long long.... 发现结果一般是m的几倍左右....不用担心T. #include<iostream ...
- 洛谷U14667 肝活动【比赛】 【状压dp】
题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...
随机推荐
- 毕设项目:springboot+vue实现的在线求职平台
一.前言 随着信息技术的飞速发展和互联网的普及,线上求职已成为众多求职者和企业招聘的重要渠道.为满足市场需求,我们利用Spring Boot和Vue技术栈,开发了一款功能全面.用户友好的在线求职平台. ...
- JavaScript小面试~什么是深拷贝,什么是浅拷贝,深拷贝和浅拷贝的区别,如何实现深拷贝
深拷贝:就是在复制数据或者对象的时候,将其内存中值复制过来. 浅拷贝:就是在复制数据或者对象的时候,是将其引用复制过来. 深拷贝和浅拷贝的区别:深拷贝复制的是被复制数据或者对象的值,复制的数据或对象会 ...
- 【Vue】 vue-element-admin 路由菜单配置
路由说明见官方文档: https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/essentials/router-and-nav.htm ...
- python科学计算:加速库numba —— 安装和试用
安装(anaconda环境下) conda install numba Demo代码: from numba import jit from numpy import arange import nu ...
- tf.metrics 使用过程中发现的一些问题
起因是看到了这么一个帖子: http://www.cocoachina.com/cms/wap.php?action=article&id=86347 简短来说就是下面的代码 运行起来结果 ...
- 阿里2021年春季实习笔试题(最后一道大题)(2020 China Collegiate Programming Contest, Weihai Site) (C. Rencontre codeforces.com/gym/102798)
实验室的慕师弟phd马上要毕业了,正准备先找个实习,投了阿里2021年春季实习的招聘,遇到最后一道编程大题没有思路事后找到了该题的最原始出处,即 2020 China Collegiate Progr ...
- IPython notebook(Jupyter notebook) 设置密码
本文共给出两种密码设置方法,一种为直接设置密码法(较为便捷),另一种为hash密码设置法 =================================== 第一种: 直接设置密码 注意: i ...
- 国产芯片 —— 2023年龙芯最新的 3A6000 确实已经追上 2020年发布的 10代 i3酷睿 四核处理器
看新闻: https://news.cnblogs.com/n/752564/ 首先,龙芯3A6000已经有了i3酷睿10代的水平,这是十分可喜可贺的,可以说这个CPU的性能已经是国产CPU的天花板了 ...
- Ubuntu18.04系统下网络文件系统nfs的安装及简单配置
硬件环境: 两台Ubuntu18.04服务器使用局域网连接,IP分别为192.168.11.66 和 192.168.11.206. ================================= ...
- ubuntu23.04/22.04下安装docker engine
官方网址: https://docs.docker.com/engine/install/ubuntu/ 2023年12月1日更新 -- Ubuntu 23.04 # Add Docker's off ...