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-1)\)
\(f(i,j-1)\)考虑首添加一个\(-1\),则贡献为\(-1\times\)最大前缀和不为\(0\)的个数,考虑序列个数减掉为\(0\)的个数
设\(k(i,j)\)为\(0\)的个数
\(i=0:k(i,j)=1\)
\(j=0或i>j:k(i,j)=0\)
\(i\le:k(i,j)=k(i-1,j)+k(i,j-1)\),理解:把\(1\)放在最后面,把\(-1\)放在最前面,一定可以构成
做法二
\(O(n+m)\)
考虑\(f(i)\)表示最大子序列为\(i\)的个数,则答案为\(\sum\limits_{i=1}^{n}i\times f(i)\)
考虑\(g(i)\)为最大子序列大于等于\(i\)的个数,显然\(max(n-m,0)\le i\le n\)
抽象到方格:长\(n\)高\(m\)的矩形,往上走相当于\(-1\),往右走相当于\(+1\),最大前缀和至少为\(i\),则路线需要经过\(y=x-i\)
\(0\le i\le n-m:C(n+m,n)\)
\(n-m<i\le n\):考虑\((0,0)\)对\(y=x-i\)对称,则为\((i,-i)\)到\((n,m)\)的方案数,转换为以下问题,为\(C(n+m,m+k)\)
已知未知数个数,系数均为\(1\),和为给定值,未知数非负个数解
Code
#include<bits/stdc++.h>
typedef long long LL;
const LL maxn=1e4+9,mod=998244853;
LL n,m,ans;
LL fac[maxn],fav[maxn],g[maxn];
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=base*ret%mod;
base=base*base%mod; b>>=1;
}
return ret;
}
inline void Pre(LL N){
fac[0]=1;
for(LL i=1;i<=N;++i) fac[i]=fac[i-1]*i%mod;
// puts("133");
fav[N]=Pow(fac[N],mod-2);
for(LL i=N;i>=1;--i) fav[i-1]=fav[i]*i%mod;
}
inline LL C(LL N,LL M){
return fac[N]*fav[M]%mod*fav[N-M]%mod;
}
inline LL Solve(LL k){
if(k<=n-m) return C(n+m,m);
return C(n+m,m+k);
}
int main(){
scanf("%lld%lld",&n,&m);
Pre(n+m);
// puts("233");
for(LL i=1;i<=n;++i) g[i]=Solve(i); g[n+1]=0;
for(LL i=1;i<=n;++i){
ans=(ans+i*((g[i]-g[i+1]+mod)%mod)%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}
CF1204E Natasha, Sasha and the Prefix Sums(组合数学)的更多相关文章
- CodeForces - 1204E Natasha, Sasha and the Prefix Sums (组合数学,卡特兰数扩展)
题意:求n个1,m个-1组成的所有序列中,最大前缀之和. 首先引出这样一个问题:使用n个左括号和m个右括号,组成的合法的括号匹配(每个右括号都有对应的左括号和它匹配)的数目是多少? 1.当n=m时,显 ...
- [CF1204E]Natasha,Sasha and the Prefix Sums 题解
前言 本文中的排列指由n个1, m个-1构成的序列中的一种. 题目这么长不吐槽了,但是这确实是一道好题. 题解 DP题话不多说,直接状态/变量/转移. 状态 我们定义f表示"最大prefix ...
- CF1204E Natasha, Sasha and the Prefix Sums (卡塔兰数推理)
题面 题解 把题意变换一下,从(0,0)走到(n,m),每次只能网右或往上走,所以假设最大前缀和为f(n),那么走的时候就要到达但不超过 y = x-f(n) 这条线, 我们可以枚举答案,然后乘上方案 ...
- CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)
传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{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] ...
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
A non-empty zero-indexed string S is given. String S consists of N characters from the set of upper- ...
- 【题解】【数组】【Prefix Sums】【Codility】Passing Cars
A non-empty zero-indexed array A consisting of N integers is given. The consecutive elements of arra ...
- Codeforces 837F Prefix Sums
Prefix Sums 在 n >= 4时候直接暴力. n <= 4的时候二分加矩阵快速幂去check #include<bits/stdc++.h> #define LL l ...
随机推荐
- 10 查询字符串,X字段必须包含(不包含)XX;_all原理
指定某个字段,必须要包含XX字符 GET /beauties/my/_search?q=Name:Chang Wei 搜出 某个字段不包含XX字符 的所有内容 GET /beauties/my/_ ...
- console.log()、console.info()、console.debug()的区别
onsole.log().console.info().console.debug()的作用都是在浏览器控制台打印信息的. 使用最多的是console.log().console.info()和con ...
- Redis除了做缓存--Redis做消息队列/Redis做分布式锁/Redis做接口限流
1.用Redis实现消息队列 用命令lpush入队,rpop出队 Long size = jedis.lpush("QueueName", message);//返回存放的数据条数 ...
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
最近Jerry写了一系列关于SAP云平台ABAP编程环境的技术文章,这些文章都是围绕着在云上的ABAP编程环境的具体知识点来分享,比如要完成一个具体的开发需求,所需要的编程步骤.这些文章陆续收到一些读 ...
- js中的call()、apply()、bind()
js中的一个核心概念就是对this的理解,关于this前面也有说过,不过在有些情况下,还是需要手动去改变this的指向,这里总结一下,js中关于this操作的三种方法 call() apply() b ...
- IDEA远程连接和上传文件到服务器
公司电脑是win,所以远程控制服务器就不能用之前自己笔记本ubuntu自带的终端了. 后来在万能的群友的提醒下,IDEA本身就自带了远程功能,摸索了一下,使用IDEA连接服务器并且可以上传文件了. 这 ...
- 190919 python水仙花数
# 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,# 其各位数字立方和等于该数本身.例如:153是一个"水仙花数",# 因为15 ...
- 华为云PaaS首席科学家:Cloud Native +AI,企业数字化转型的最佳拍档
近日,在2019华为全球分析师大会期间,华为云PaaS首席科学家熊英博士在+智能,见未来(华为云&大数据)的分论坛上,从云计算行业发展谈起,深入云原生发展趋势,对华为云智能应用平台做了深度解读 ...
- Makefile学习二
今天继续对Makefile进行研究,话不多说,进入正题: make常用内嵌函数: 下面利用上面的知识点来实现一个多级目录的Makefile,如下: 多级目录Makefile: 这个例子的目录结构如下: ...
- SpringBoot -基础学习笔记 - 01
SpringBoot个人笔记-szs 一.使用thymeleaf模板引擎来指定所需资源的位置 可以做到当项目名进行更改后,模板引擎也会进行更新相关的路径;如下图展示,会自动添加crud根目录! < ...