题目连接:Harvest of Apples

题意:给出一个n和m,求C(0,n)+C(1,n)+.....+C(m,n)。(样例组数为1e5)

题解:首先先把阶乘和逆元预处理出来,这样就可O(1)将C(m,n)求出来了。但这样还是会超时,所以接下来要分块,每隔500个处理出C(1~m,n)的结果。然后还要知道一个性质 C(a,b) = ∑C(t1,x)*C(t2,y)  (x+y<=b),这样我们就可以将给出的m和n分为两个组,其中一个组中元素的个数为500的倍数。然后我们对于另一个组枚举可能的t2然后求和,每次询问最大的操作次数就变成了500次。

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9 + ;
typedef pair<int,int> P;
const int MAX_N = 1e5+;
int N,M,T,S;
LL Jc[MAX_N];
LL ni_[MAX_N];
LL tran[][MAX_N];
LL tr[][];
//费马小定理求逆元
LL pow(LL a, LL n, LL p) //快速幂 a^n % p
{
LL ans = ;
while(n)
{
if(n & ) ans = ans * a % p;
a = a * a % p;
n >>= ;
}
return ans;
} LL niYuan(LL a, LL b) //费马小定理求逆元
{
return pow(a, b - , b);
} void calJc() //求maxn以内的数的阶乘
{
Jc[] = Jc[] = ;
for(LL i = ; i < MAX_N; i++)
Jc[i] = Jc[i - ] * i % mod;
}
void calni(){
for(int i=;i<MAX_N;i++){
ni_[i] = niYuan(Jc[i],mod);
}
} LL C(LL a, LL b) //计算C(a, b)
{
return Jc[a] * ni_[b] % mod
* ni_[a-b] % mod;
} void init(){
for(int i=;i<MAX_N/;i++){
for(int j=;j<MAX_N;j++){
tran[i][j] = C(*i,j);
if(j>) tran[i][j] = (tran[i][j] + tran[i][j-])%mod;
}
} for(int i=;i<;i++){
for(int j=;j<;j++){
tr[i][j] = C(i,j);
}
}
}
int main(){
calJc();
calni();
init();
//cout<<"OK"<<endl;
cin>>T;
while(T--){
LL a,b;
scanf("%lld%lld",&a,&b);
LL ans = ;
if(a < ){
for(int i=;i<=b;i++)
ans = (ans + tr[a][i])%mod;
}
else{
LL t1 = a / ;
LL t2 = a - t1*;
for(int i=;i<=min(b,t2);i++){
ans = (ans + tr[t2][i]*tran[t1][min(b - i,t1*)])%mod;
}
}
printf("%lld\n",ans); }
return ;
}

最新文章

  1. js获取当前对象的颜色判断改变颜色
  2. sql-按周输出每月的周日期范围
  3. 【前端福利】用grunt搭建自动化的web前端开发环境-完整教程
  4. 为Kindeditor控件添加图片自动上传功能
  5. SQL Server 文件和文件组
  6. javaweb学习总结十七(web应用组织结构、web.xml作用以及配置虚拟主机搭建网站)
  7. Intersecting Lines - POJ 1269(判断平面上两条直线的关系)
  8. Python学习笔记五--条件和循环
  9. IOS 单例模式的学习
  10. JS高级学习路线——面向对象进阶
  11. Linux 文本行列转换
  12. 12. ZooKeeper配额和认证
  13. 细说MyEclipse调试
  14. Monkey自动化脚本(一)
  15. P1824 进击的奶牛(二分)
  16. VirtualBox虚拟机磁盘瘦身
  17. ssm中整合Mybatis可以扫描到放在mapper下面的xml文件的方法
  18. smtplib.SMTPDataError: (554, b&#39;DT:SPM 163……)
  19. django 环境配置.
  20. day11 十一、函数对象,名称空间,作用域,和闭包

热门文章

  1. 基于纤程(Fiber)实现C++异步编程库(一):原理及示例
  2. 结合 spring 使用阿里 Druid 连接池配置方法
  3. 误删mysql表物理文件的解决方法(不涉及恢复数据)
  4. sysbench安装、使用、结果解读
  5. October 21st 2017 Week 42nd Saturday
  6. October 14th 2017 Week 41st Saturday
  7. eclispe快捷键
  8. 【Ansible 文档】【译文】入门教程
  9. 阿里开源 iOS 协程开发框架 coobjc!--异步编程的问题与解决方案
  10. 服务器 三 MQTT服务器手机开发