首页 > 其他分享 >题解 ABC154F【Many Many Paths】

题解 ABC154F【Many Many Paths】

时间:2022-11-08 21:58:09浏览次数:54  
标签:Paths return ifac int Many LL leq 题解 sum

problem

令 \(f(i,j)\) 表示,在平面直角坐标系中,从 \((0,0)\) 出发,每次向上或向右走一步,到达 \((i,j)\) 的方案数,求:

\[\sum_{l_1\leq i\leq r_1}\sum_{l_2\leq j\leq r_2}f(i,j). \]

\(n\leq 10^7\)。

solution

首先容斥是平凡的,拆成四个询问做。

结论一

\(f(i,j)=\binom{i+j}{i}.\)

证明:相当于是一个长为 \(i+j\) 的操作序列,要么上要么右,一共 \(i\) 个向右的操作插入序列中,就有这么多的方案数。

观察到 \(\binom{i+j}{i}=\binom{i+j}{j}\)。

结论二

\(\sum_{0\leq i\leq n}f(i,m)=f(n,m+1).\)

你考虑这些路径往上走一步,之后一直往右走,这些路径和 \(f(n,m+1)\) 完全一致。

结论三

\[\begin{aligned} \sum_{0\leq i\leq n}\sum_{0\leq j\leq m}f(i,j) &=\sum_{0\leq i\leq n}f(i+1,m)\\ &=\sum_{1\leq i\leq n+1}f(i,m)\\ &=f(m+1,n+1)-f(0,m+1)\\ &=f(m+1,n+1)-1. \end{aligned}\]

注意换元不要换错。

code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int P=1e9+7;
LL qpow(LL a,LL b,int p=P){LL r=1;for(a%=P;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p; return r;}
template<int N,int P> struct C_prime{
	LL fac[N+10],ifac[N+10];
	C_prime(){
		for(int i=fac[0]=ifac[0]=1;i<=N;i++) fac[i]=fac[i-1]*i%P;
		ifac[N]=qpow(fac[N],P-2,P);
		for(int i=N-1;i>=1;i--) ifac[i]=ifac[i+1]*(i+1)%P;
	}
	LL operator()(int n,int m){return fac[n]*ifac[n-m]%P*ifac[m];}
};
C_prime<2000010,P> C;
LL f(int n,int m){return C(n+m,n);}
LL solve(int n,int m){
	//\sum_{0\leq i\leq m} C(n,i)=C(n+1,m)
	return (f(n+1,m+1)-1+P)%P;
}
int l,r,x,y;
int main(){
	scanf("%d%d%d%d",&l,&x,&r,&y);
	printf("%lld\n",(solve(r,y)-solve(r,x-1)-solve(l-1,y)+solve(l-1,x-1)+P+P)%P);
	return 0;
}

标签:Paths,return,ifac,int,Many,LL,leq,题解,sum
From: https://www.cnblogs.com/caijianhong/p/solution-ABC154F.html

相关文章

  • CSP-S 2022 题解
    A假期计划若\(u\)转车不超过\(k\)次可以到达\(v\),相当于\(u\leadstov\)的最短路长度不超过\(k+1\)。对于每个点\(u\),我们首先预处理满足如下条件的点\(v\)......
  • CF1553I Stairs 题解
    linkSolution虽然但是,这个sb题目真的很sb,不知道怎么评到3400的,也不知道为什么我又没有做出来......
  • 题解
    A发现\(a\)的线性基的大小很大,枚举一下线性基外面的数选或者不选,判断一下能否构成\(k\)个区间即可。B我们找出所有的三元组\((x,y,c)\)代表某一列中\(x\)行和......
  • too many open files(打开的文件过多)解决方法
    https://www.cnblogs.com/conanwang/p/5818441.htmlSU:failedtoexecute/bin/bash:系统中打开的文件过多一、产生原因toomanyopenfiles(打开的文件过多)是Linux......
  • 使用axios请求,前端数字long类型精度问题解决方法
    今天开发遇到个问题,服务器后端的Long类型数据,传到前端会出现精度丢失,如:164379764419858435,前端会变成164379764419858430。在浏览器中做测试可知,这就是一个精度丢失的问题。......
  • 30道TypeScript 面试问题解析
    英文|https://betterprogramming.pub/top-50-typescript-interview-questions-explained-5e69b73eeab1翻译|web前端开发TypeScript是Microsoft开发的JavaScript的开......
  • antdv (Ant Design of Vue) 复杂表单验证问题解决方法
    我们知道,在简单的表单中,都是一项一项往下排列的,验证的时候也按照字段一一对把规则写好就能验证,如下图  但是遇到了复杂场景的表单验证,比如一项由多个input、checkbox......
  • error: pathspec 'add canshu'' did not match any file(s) known to git
      报错原因:是由于windows下不支持单引号,将单引号改为双引号即可 ......
  • 【ARC105C】Camels and Bridge 题解
    题意给定\(n\)只骆驼和每条骆驼的重量\(a_i\)。这些骆驼要通过一条路,这条路被分为\(m\)个部分,每个部分的长度为\(l_i\),限重为\(v_i\)。同时经过这部分的骆驼的重......
  • CF1368G Shifting Dominoes 题解
    CF1368GShiftingDominoes题解题目传送门CF1368GShiftingDominoes题目大意给你一个\(n\timesm\)的棋盘,上面有\(\frac{n\timesm}{2}\)个不重叠的骨牌,你可以......