首页 > 其他分享 >Many Many Paths(组合计数)

Many Many Paths(组合计数)

时间:2022-09-26 17:11:37浏览次数:87  
标签:Paths leq int Many ll 计数 res infac mod

题意

给定\(r1, c1, r2, c2\),求\(\sum\limits_{i=r1}^{r2} \sum\limits_{j=c1}^{c2} f(i,j)\),其中\(f(i,j)\)表示从\((0,0)\)往上或者往右走到\((i,j)\)的方案数。

题目链接:https://atcoder.jp/contests/abc154/tasks/abc154_f

数据范围

\(1 \leq r_1 \leq r_2 \leq 10^6\)
\(1 \leq c_1 \leq c_2 \leq 10^6\)

思路

参考blog:https://www.cnblogs.com/lllxq/p/12354597.html

第五行的公式,在前面加上一个\(\binom{i+1}{0}\),再减去一个\(\binom{i+1}{0}\),即可得到。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N = 2000010, mod = 1e9 + 7;

int r1, c1, r2, c2;
ll fac[N], infac[N];

ll qmi(ll a, ll b)
{
    ll res = 1;
    while(b) {
        if(b & 1) res = res * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}

ll inv(ll a)
{
    return qmi(a, mod - 2);
}

ll C(ll x, ll y)
{
    return fac[x] * infac[y] % mod * infac[x - y] % mod;
}

void init()
{
    fac[0] = infac[0] = 1;
    for(int i = 1; i < N; i ++) fac[i] = fac[i - 1] * i % mod;
    for(int i = 1; i < N; i ++) infac[i] = infac[i - 1] * inv(i) % mod;
}

ll calc(int a, int b)
{
    ll res = 0;
    for(int i = 0; i <= a; i ++) {
        res = (res + C(i + b + 1, b)) % mod;
    }
    return res;
}

int main()
{
    init();
    scanf("%d%d%d%d", &r1, &c1, &r2, &c2);
    printf("%lld\n", ((calc(r2, c2) - calc(r1 - 1, c2) - calc(r2, c1 - 1) + calc(r1 - 1, c1 - 1)) % mod + mod) % mod);
    return 0;
}

标签:Paths,leq,int,Many,ll,计数,res,infac,mod
From: https://www.cnblogs.com/miraclepbc/p/16731629.html

相关文章

  • mysql too many connections
    mysqltoomanyconnections--最大连接数showvariableslike'max_connections';--最大返回数Max_used_connections/max_connections*100%应该要大于......
  • 添加分类计数/求和……列
    问题:在新的一列里显示某列根据指定条件的分类计数/求和……let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],分组的行=Table.Group(源,{"类别"},......
  • QL Server 2005性能计数器错误的解决办法
    查看安装帮助后,发现有这一段话:1在MicrosoftWindows2003或WindowsXP桌面上,依次单击“开始”、“运行”,然后在“打开”中键入regedit.exe,再单击“确定”。在......
  • 垃圾回收算法(1)-引用计数法
    算法原理引用记数法在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活的对象,哪些是已经死亡的对象,只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的......
  • Python: 取消numpy科学计数法
    Numpy中默认是使用科学计数法来显示数据的,但是这种做法往往不利于我们观测数据,比如坐标数据等。那么如何取消numpy科学计数法呢,请往下看。np.set_printoptions()import......
  • Max-Min Sums(组合计数,算贡献)
    题意对于一个有限集合\(X\),令\(f(X)=\maxX-\minX\)给定\(N\)个整数\(A_1,A_2,\dots,A_N\)我们要从中选择\(K\)个元素构成一个新的集合\(S\)。如果我们根据下标......
  • aardio高性能计数器演示
    //高性能计数器演示importconsole;importtime.performance;vartk=time.performance.tick();sleep(2000)console.log((time.performance.tick()-tk)/......
  • 题解【CF1702G2 Passable Paths (hard version)】
    题目传送门。考虑建立虚树然后再上面搞树形DP。于是这道题就变成分讨题。设\(f_i\)表示\(i\)子树内的答案。若\(f_i=1\),表示\(i\)子树内的特殊点可以被一条链覆......
  • js计数排序
    **计数排序**核心思想:找到数组中的最大数和最小数来确定生成数组的大小,根据数组值找到到数组下标与值相同的位置+1,来标识当前值有几个,最后遍历当前数组。letarr=[......
  • 无向图三元环 查找/计数
    理解时间复杂度\(O(M\sqrt{M})\)作用求出无向图的所有三元环过程首先要对所有的无向边进行定向,对于任何一条边,从度数大的点连向度数小的点,如果度数相同,从编号小的点......