CF1204E Natasha, Sasha and the Prefix Sums (卡塔兰数推理)
题面
题解
把题意变换一下,从(0,0)走到(n,m),每次只能网右或往上走,所以假设最大前缀和为f(n),那么走的时候就要到达但不超过 y = x-f(n) 这条线,
我们可以枚举答案,然后乘上方案数。
根据卡塔兰数的通项公式公式的推导过程, 可以得出方案数的解法,
对于这道题的图中,求碰到过红线的方案数则是把第一次碰到红线后的步骤都沿红线轴对称折叠过去,那么就唯一对应一个从(0,0)走到(m+f(n),n-f(n))的方案,方案数就为C(n+m,n-f(n)) (这里是组合数)
我们再容斥一小下,刚好只走到y=x-f(n)的方案数等于碰到过y=x-f(n)的方案数减去碰到过y=x-f(n)-1的方案数,为C(n+m,n-f(n)) - C(n+m,n-f(n)-1),
CODE
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#define MAXN 2005
#define MAXM 35
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x)&(x))
//#define int LL
using namespace std;
inline LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s == '-')f = -1;s = getchar();}
while(s >= '0' && s <= '9') {x = x * 10 + (s - '0');s = getchar();}
return x * f;
}
const int jzm = 998244853;
int n,m,i,j,s,o,k;
int C[MAXN<<1][MAXN<<1];
int main() {
C[0][0] = 1;
for(int i = 1;i <= 4000;i ++) {
C[i][0] = 1;
for(int j = 1;j <= i;j ++) {
C[i][j] = (C[i-1][j] +0ll+ C[i-1][j-1]) % jzm;
}
}
n = read();m = read();
int ans = 0,pre = 0,no = 0;
for(int i = n;i >= max(1,n-m);i --) {
no = C[n+m][n-i];
ans = (ans +0ll+ (no +0ll+ jzm - pre) % jzm *1ll* i % jzm) % jzm;
pre = no;
}
printf("%d\n",ans);
return 0;
}
CF1204E Natasha, Sasha and the Prefix Sums (卡塔兰数推理)的更多相关文章
- [CF1204E]Natasha,Sasha and the Prefix Sums 题解
前言 本文中的排列指由n个1, m个-1构成的序列中的一种. 题目这么长不吐槽了,但是这确实是一道好题. 题解 DP题话不多说,直接状态/变量/转移. 状态 我们定义f表示"最大prefix ...
- CF1204E Natasha, Sasha and the Prefix Sums(组合数学)
做法一 \(O(nm)\) 考虑\(f(i,j)\)为i个+1,j个-1的贡献 \(f(i-1,j)\)考虑往序列首添加一个\(1\),则贡献\(1\times\)为序列的个数:\(C(j+i-1,i ...
- CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)
传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ...
- CodeForces - 1204E Natasha, Sasha and the Prefix Sums (组合数学,卡特兰数扩展)
题意:求n个1,m个-1组成的所有序列中,最大前缀之和. 首先引出这样一个问题:使用n个左括号和m个右括号,组成的合法的括号匹配(每个右括号都有对应的左括号和它匹配)的数目是多少? 1.当n=m时,显 ...
- E. Natasha, Sasha and the Prefix Sums
http://codeforces.com/contest/1204/problem/E 给定n个 1 m个 -1的全排 求所有排列的$f(a) = max(0,max_{1≤i≤l} \sum_{j ...
- Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学
Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学 [Problem Description] ...
- catalan卡塔兰数
令h(0)=1,h(1)=1,卡塔兰数数满足递归式:h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;还可 ...
- 卡塔兰数(Catalan)
卡塔兰数(Catalan) 原理: 令h(0)=1,h(1)=1. 卡塔兰数满足递推式:h(n)=h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)(n>=2) ...
- [HNOI2009]有趣的数列(卡塔兰数,线性筛)
[HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1< ...
随机推荐
- 写selenium常用到的js代码
selenium可以运行JavaScript代码,可以用一些JavaScript来辅助编写Selelnium代码. 1.scrollIntoView - 向下拉滚动条,使得某元素可见 IWebElem ...
- 动态线程池框架 DynamicTp v1.0.6版本发布。还在为Dubbo线程池耗尽烦恼吗?还在为Mq消费积压烦恼吗?
DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池管理工具,主要功能可以总结为 动态调参.通知报警.运行监控.三方包线程池管理等几大类. 经过几个版本迭代,目前最新 ...
- 【Redis】客观下线
在sentinelHandleRedisInstance函数中,如果是主节点,需要做如下处理: void sentinelHandleRedisInstance(sentinelRedisInstan ...
- 密码学系列之:PKI的证书格式表示X.509
目录 简介 一个证书的例子 X.509证书的后缀 .pem .cer, .crt, .der .p7b, .p7c .p12 .pfx 证书的层级结构和交叉认证 x.509证书的使用范围 总结 简介 ...
- 一种让运行在CentOS下的.NET CORE的Web项目简单方便易部署的自动更新方案
一.项目运行环境 项目采用的是.NET5开发的Web系统,独立部署在省内异地多台CentOS服务器上,它们运行在甲方专网环境中(不接触互联网),甲方进行业务运作时(一段时间内)会要求异地服务器开机上线 ...
- Python之枚举法解数学题
作为初二的学生,数学题总是令我苦恼的问题.尤其是我们这里的预备班考试(即我们这里最好的两所高中提前一年招生,选拔尖子生的考试)将近,我所面对的数学题越发令人头疼. 这不,麻烦来了: 如图,在正方形AB ...
- NC20276 [SCOI2010]传送带
NC20276 [SCOI2010]传送带 题目 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD ...
- PTA(BasicLevel)-1013 数素数
一.问题描述 令 Pi 表示第 i 个素数.现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数. 输出格式:输入在一行中给出 M 和 N,其间以空格分隔. 输 ...
- springboot修改文件上传大小
servlet配置文件上传限制 spring: servlet: multipart: max-file-size: 1000MB max-request-size: 1000MB mysql设置re ...
- 常用类-Java比较器
一.Comparable接口 Java中的对象,正常情况只能进行比较 == 或 !=不能使用 > 或 < 的,但是在实际开发中有需要进行对象的比较 comparable接口的使用举例: 1 ...