首页 > 其他分享 >T2回家(home)题解

T2回家(home)题解

时间:2023-10-03 11:55:06浏览次数:41  
标签:int 题解 T2 long home 2n 卡特兰 mod

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}$$

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;
}

标签:int,题解,T2,long,home,2n,卡特兰,mod
From: https://www.cnblogs.com/alloverzyt/p/17740938.html

相关文章

  • [ARC035B] アットコーダー王国のコンテスト事情 题解
    前置芝士排列组合分析明显的贪心,第一问与此题思路相似,优先选择做时间少的,可以尽可能让后面的罚时尽量的小。难点在第二问,第二问问的是有几种可能性,有个显然的结论:相同做题时间的题目,位置调换答案仍然相同。那么可以用桶+排列组合来解决:用桶储存这个做题时间的出现次数\(b......
  • AT_abc321_f 题解
    #思路简单动态规划,$dp_i$指当前操作后取和为$i$的球的方案数,每次输出$dp_K$即可。需要注意的是对于每次`+x`操作,计算$dp$数组时要倒着循环。时间复杂度:$O(QK)$。#代码```cpp#include<bits/stdc++.h>usingnamespacestd;longlongdp[5010];intmain(){ longlon......
  • RDP远程登录后全屏,本地的任务栏始终显示的问题解决
    文章目录问题解决参考问题RDP远程登录后全屏,本地的任务栏(TaskBar)始终在下面,遮住了远程桌面的最下面,进行了解决。解决BestsolutionhowtohidelocalTaskbarwhenRDPtoaremotedesktopLaunchTaskManagerRight-click“WindowsExplorer”Select“Restart”Itworkson......
  • CodeForces-1276#B 题解
    正文这是样例1第1组数据的图。让我们观察一下,路径1->6、1->7、2->6、2->7是可行的,所以答案为4。上述路径中好像点4没有贡献?再看看样例1第2组数据的图。发现点1和点4相互之间存在其他路径,无需经过点\(a\)和点\(b\)。综上,我们可以知道:在\(a\)和\(b\)......
  • AT_abc279_g [ABC279G] At Most 2 Colors 题解
    题解\(dp[i]\)表示长度为i的格子的合法涂色数,考虑第\(i\)个怎么放第\(i\)个前面\(k-1\)个位置有2种颜色,则第\(i\)个位置只能放这两种颜色中的一种用合法方案减只有一种的方法,即得两种颜色的方案数而只有一种颜色的方案数,等于\(f[i-k+1]\),此时,让中间的\(k-2\)个......
  • P4839 P 哥的桶 题解
    题目大意有\(n\)个桶,\(m\)次操作。在\(pos\)桶中加入一个\(val\)值,求\([l,r]\)中选任意个桶使得异或和最大,求最大的异或和,注意每个节点是一个桶可以放多个值\(n,m≤5×104\)。题目思路单点修改,区间查询,异或最大值很显然是线段树维护线性基然后这样的复杂度是......
  • CF906C题解
    可能更好的阅读体验大家好,我和DP有仇,所以我用猜结论的方法过了这道题。可能是这道题的一个全新思路,可能人自闭久了什么都能想出来(((upd:好像这也是官方题解思路,看来大家做题不太喜欢看CF官方题解(((首先考虑一个问题:如果这是一道构造题,怎么构造一组合法的解?在草稿纸上画了很久......
  • P2230 Tinux系统 题解
    传送门题目大意:一个\(n\)个叶子节点,一个节点最多可以有\(k\)条边连向子节点,每个节点\(i\)有一个权值\(P_{i}\)。记每个节点子树内点的个数(不包括它自己)为\(son_{i}\),那么每个节点对答案的贡献就是\(son_{i}^2\timesP_{i}\)。特别的,根节点贡献为\(0\),求总贡献。两......
  • P1045 麦森数 题解
    传送门前排提醒:本篇题解没有使用压位和快速幂,运用了一种预处理的思想,希望能提供一种新的思路。首先将\(2^{p}-1(d)\)转换为\(1111…111(b)\)。关于第一问:我们先考虑\(2\)进制转\(8\)进制,将每\(3\)位转为\(1\)位,即每\(\log{8}\)位转为\(1\)位。\(2\)进制转......
  • UVA1471 防线 Defense Lines 题解
    传送门首先可以将题意大概可以简化为:取两端不重复的连续子序列,组成一个最长的连续递增子序列。我们先dp预处理出以\(i\)为结尾的连续递增子序列长度\(dpr_{i}\)。同样预处理出以\(i\)为开头的连续递增子序列长度\(dpl_{i}\)。考虑对于每个\(dpr_{i}\),找到满足\(a_{......