首页 技术 正文
技术 2022年11月21日
0 收藏 648 点赞 3,826 浏览 1114 个字

我们看这段代码

int cnt = 0;
for (int a_1 = 0; a_1 <= m; a_1++) {
for (int a_2 = 0; a_1 + a_2 <= m; a_2++) {
...
for (int a_n = 0; a_1 + a_2 + ... + a_n <= m; a_n++) {
cnt = (cnt + 1) % 19491001;
}
}
}
printf("%d\n", cnt);

其实是可以改写为

int cnt = 0;
for (int a_1 = 1; a_1 <= m + n; a_1++) {
for (int a_2 = 1; a_1 + a_2 <= m + n; a_2++) {
...
for (int a_n = 1; a_1 + a_2 + ... + a_n <= m + n; a_n++) {
cnt = (cnt + 1) % 19491001;
}
}
}
printf("%d\n", cnt);

答案不变(就是把\(a_0, a_1, … , a_n\)全部加了1,源代码里相应的\(m\)要增加\(n\),因为n个循环变量,每个变量都增加了1,所需增加即为\(n \times 1 = n\))

然后根据组合数学中组合数的定义,所求为C(m + n, n)

由于数特大~,而且19491001是质数,所以这里使用了Lucas定理

哦对了还要用乘法逆元的线性求法

下面代码

#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")using namespace std;const int maxn = 20000000;
const int p = 19491001LL;
int n, inv[maxn], m, js[maxn];int Lucas(int n, int m)
{
if(n < m)return 0LL;
if(n < p)return js[n] * inv[m] % p * inv[n - m] % p;
return Lucas(n % p, m % p) * Lucas(n / p, m / p) % p;
}signed main()
{
int t;
scanf("%lld", &t);
js[0] = 1LL;
for(register int i = 1LL; i <= p; i++)js[i] = js[i - 1] * i % p;
inv[1] = 1LL; inv[0] = 1LL;
for(register int i = 2LL; i <= p; i++)inv[i] = (p - p / i) * inv[p % i] % p;
for(register int i = 2LL; i <= p; i++)inv[i] = inv[i] * inv[i - 1] % p;
while(t--)
{
scanf("%lld%lld", &n, &m);
printf("%lld\n", Lucas(n + m, m));
}
return 0;
}

三年OI一场空,不开long long见祖宗

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,076
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,812
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,894