首页 > 其他分享 >洛谷 P1044 [NOIP2003 普及组] 栈 题解

洛谷 P1044 [NOIP2003 普及组] 栈 题解

时间:2023-12-04 18:46:08浏览次数:53  
标签:p2 p1 洛谷 题解 P1044 dfrac 2n include

洛谷 P1044 [NOIP2003 普及组] 栈 题解

Sol

本题通过分析可得:

假设现在进行 \(12\) 次操作,我们把 push 认为是在地图上向右走,pop 向上走,那么其中一个合法的步骤可以是(\(p1\) 代表 push,\(p2\) 代表 pop):\(p1, p1, p2, p1, p2, p2, p1, p1, p2, p2, p1, p2\)。

而且我们发现,他最终会走到 \((n, n)\) 的位置,且如果这个序列是一个合法序列(pushpop 串的任意前缀 \(\text{push}\) 的个数 \(\ge\) \(\text{pop}\) 的个数)它能在走的过程中保证会在 \((0, 0)\),\((n, n)\),\((n, 0)\) 这三个点围成的三角形内走动。

我们可以推出结果就是能走到 \((n, n)\) 的总数 \(-\) 非法个数,也就是 \(C^n_{2n} \times C^{n - 1}_{2n}\)。

\(C^{n}_{2n}\) 表示走 \(2n\) 步然后走到点 \((n, n)\),共选取了 \(n\) 步往右走。

\(C^{n - 1}_{2n}\) 表示走 \(2n\) 步然后走到点 \((n - 1, n + 1)\),共选取了 \(n - 1\) 步往右走。

接下来就可以化简了。

\(C^{n}_{2n} - C^{n - 1}_{2n}\)

\(= \dfrac{(2n)!}{(n!)^{2}} - \dfrac{(2n)!}{(n-1)!\ (n+1)!}\)

\(= \dfrac{(2n)!\ (n+1)-n(2n)}{(n+1)!\ n!}\)

\(= \dfrac{1}{n+1} \times \dfrac{(2n)!}{(n!)^{2}}\)

\(= \dfrac{C^{n}_{2n}}{n+1}\)

我们还可以推出:

\(C^{m}_{n} = C^{m-1}_{n-1} + C^{m}_{n-1}\)

那么代码就一呼而出了。

Code

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stack>

using namespace std;

using ll = long long;

const int kMaxN = 110, kInf = (((1 << 30) - 1) << 1) + 1;
const ll kLInf = 9.22e18;

int n, f[kMaxN];

int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n;
  f[0] = 1, f[1] = 1;
  for (int i = 2; i <= n; ++ i) {
    for (int j = 0; j < i; ++ j) {
      f[i] += f[j] * f[i - j - 1];
    }
  }    
  cout << f[n] << '\n';
	return 0;
}

标签:p2,p1,洛谷,题解,P1044,dfrac,2n,include
From: https://www.cnblogs.com/bc2qwq/p/luoguP1044Sol.html

相关文章

  • CF1692G 2^Sort 题解
    题意:思路:必要性:对于任意一个符合条件的区间$[l,r]$,任意相邻两项,满足$a_i<2*a_{i+1}(l\lei\ler-1)$。充分性:对于任意一个长度为$k+1$的区间$[l,r]$,如果任意相邻两项满足$a_i<2*a_{i+1}(l\lei\ler-1)$,那么该区间即为所求区间。......
  • CF1901 C Add, Divide and Floor 题解
    LinkCF1901CAdd,DivideandFloorQuestion给定一个长度为\(n\)的序列,每次操作你需要选择一个整数\(x\),并将所有\(a_i\)替换为\(\lfloor\frac{a_i+x}{2}\rfloor\)。求至少多少次操作后能将所有\(a_i\)变相同若最少次数小于等于\(n\),输出操作次数和每次操作所选......
  • Win11 Carla 安装教程 及 问题解决
    Win11Carla安装教程及问题解决Carlaversion:0.9.15Platform/OS:Windows11GPU:NVIDIAGeForceMX350RAM:16GBCarla下载地址:Releases·carla-simulator/carla·GitHub下载完成后解压,运行CarlaUE4.exe出现报错:Outofvideomemorytryingtoallocatearen......
  • CF1902 D Robot Queries 题解
    LinkCF1902DRobotQueriesQuestionRobot初始在\((0,0)\),有一个字符串\(s\),表示运行列表\(U\):y+1\(D\):y-1\(L\):x-1\(R\):x+1之后有\(Q\)次询问,有\(L,R,x,y\),问把运行序列的\([L,R]\)反转,Robot是否经过了点\((x,y)\)Solution显然,对于一个区间\([L,R]\)......
  • win10 访问 ubuntu 虚拟机 上的Django web 服务 操作 和 问题解决
    虚拟机版本VMware16proubuntu版本 Ubuntu22.04.1LTS 第一步:虚拟机设置NATEdit>VirtualNetworkEditor修改配置更改DHCP设置要注意ip地址要用在虚拟机Ubuntu系统中的网段范围 在NAT添加端口转发 查看ubuntu防火墙sudoufwstatus Status:ina......
  • CF1902 C Insert and Equalize 题解
    LinkCF1902CInsertandEqualizeQuestion有一个\(n\)个元素的数组\(a\),每个元素都不一样现在我们需要在\(a\)中添加一个数字\(a_{n+1}\),和之前的元素都不一样然后选择一个数\(x\),可以在一个元素上加\(x\),为操作一次,(每次加的数都是\(x\))求,操作的最少次数Solution......
  • CF1902 A Binary Imbalance 题解
    LinkCF1902ABinaryImbalanceQuestion给出一个01串,可以在任意一个位置\(i\)插入一个字符,如果\(a_i\nea_{i+1}\)插入的字符为\(0\)否则插入的字符为\(1\)问,是否可以通过任意次操作使得串中\(0\)的数量比\(1\)多Solution如果一个串都为\(0\)肯定符合都......
  • [AGC063C] Add Mod Operations 题解
    题目链接点击打开链接题目解法好难想的构造题!!!到底是怎么想到的???首先无解的条件是好判的,如果有\(i\neqj,\;a_i=a_j\)且\(b_i\neqb_j\),那么就无解将\(a\)从小到大排序考虑下面的构造方式:\(y=curmax+x\),这样可以使最大值清\(0\),其他数都\(+x\),这是一个类似消元的过程,每......
  • CF1902 B Getting Points 题解
    LinkCF1902BGettingPointsQuestionMonocarp的一个学期有\(n\)天,需要修\(P\)个学分,完成一节课程加\(l\)个学费,完成一个任务加\(t\)个学分Monocarp一天可以完成一节课+两个任务任务每周分配一个,也就是day1,day8,day15...问,在可以修满学分的情况下,Monocarp最多休......
  • 湖南省网络攻防邀请赛 RE 题解
    ez_apkk解题过程:将apk拖入jadx,查看MainActivity,发现是简单RC4加密,密钥是“55667788”,最后再将加密结果+1publicStringEncrypt(StringplainText,Stringkey){int[]S=newint[256];byte[]K=newbyte[256];char[]cArr={'\n','+',18......