题目大意:

给定n m

在n个数中最多选择m个的所有方案

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define INF 0x3f3f3f3f
  4. #define LL long long
  5. const int mod=1e9+;
  6. const int N=1e5+;
  7.  
  8. /********组合数模板*********/
  9. LL pow_mod(LL a, LL b) {
  10. LL res = 1LL; a %= mod;
  11. while(b){
  12. if(b & ) res = res * a % mod;
  13. a = a * a % mod;
  14. b >>= ;
  15. } return res;
  16. }
  17. LL inv(LL a) { return pow_mod(a, mod-); }
  18. LL F[N], Finv[N];//F是阶乘,Finv是逆元的阶乘
  19. void init() {
  20. F[] = Finv[] = 1LL;
  21. for(int i = ; i < N; i ++){
  22. F[i] = F[i-] * 1LL * (LL)i % mod;
  23. Finv[i] = Finv[i-] * 1LL * inv(i) % mod;
  24. }
  25. } // O(n)预处理
  26. LL C(LL n, LL m) {
  27. if(m < || m > n) return ;
  28. return F[n] * 1LL * Finv[n - m] % mod * Finv[m] % mod;
  29. } // O(1)获得组合数C(n,m)
  30. /**************************/
  31.  
  32. LL res[N];
  33.  
  34. /********莫队*********/
  35. int len;
  36. struct Q {
  37. LL n,m;
  38. int block, id;
  39. bool operator <(const Q& q)const {
  40. if(block==q.block) return n<q.n;
  41. return block<q.block;
  42. }
  43. }q[N];
  44. void Mo(int t) {
  45. LL L=, R=, ans=1LL;
  46. for(int i=;i<t;i++) {
  47. LL l=q[i].n, r=q[i].m;
  48. while(L>l) ans=((ans+C(L-1LL,R))%mod*Finv[])%mod, L--;
  49. while(L<l) ans=(*ans%mod-C(L,R)+mod)%mod, L++;
  50. while(R<r) ans=(ans+C(L,R+))%mod, R++;
  51. while(R>r) ans=(ans-C(L,R)+mod)%mod, R--;
  52. res[q[i].id]=ans;
  53. }
  54. }
  55. /**************************/
  56.  
  57. int main()
  58. {
  59. init(); len=sqrt(N);
  60. int t; scanf("%d",&t);
  61. for(int i=;i<t;i++) {
  62. scanf("%lld%lld",&q[i].n,&q[i].m);
  63. q[i].block=q[i].m/len; q[i].id=i;
  64. }
  65. sort(q,q+t);
  66. Mo( t);
  67. for(int i=;i<t;i++)
  68. printf("%lld\n",res[i]);
  69.  
  70. return ;
  71. }

HDU6333 莫队+组合数的更多相关文章

  1. HDU 6333 莫队+组合数

    Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  2. Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元

    题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...

  3. HDU6333 莫队+组合数学

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: T次询问,每次询问n个苹果中最多拿m个苹果的方法数 题解: 因为T为1e5,所以直接做时间 ...

  4. 联赛模拟测试12 C. sum 莫队+组合数

    题目描述 分析 \(80\) 分的暴力都打出来了还是没有想到莫队 首先对于 \(s[n][m]\) 我们可以很快地由它推到 \(s[n][m+1]\) 和 \(s[n][m-1]\) 即 \(s[n] ...

  5. hdu6333 Problem B. Harvest of Apples(组合数+莫队)

    hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m)    设 ...

  6. HDU-6333 Problem B. Harvest of Apples 莫队

    HDU-6333 题意: 有n个不同的苹果,你最多可以拿m个,问有多少种取法,多组数据,组数和n,m都是1e5,所以打表也打不了. 思路: 这道题要用到组合数的性质,记S(n,m)为从n中最多取m个的 ...

  7. Problem B. Harvest of Apples(杭电2018年多校+组合数+逆元+莫队)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题目: 题意:求C(n,0)+C(n,1)+……+C(n,m)的值. 思路:由于t和n数值范围太 ...

  8. 【魔改】莫队算法+组合数公式 杭电多校赛4 Problem B. Harvest of Apples

    http://acm.hdu.edu.cn/showproblem.php?pid=6333 莫队算法是一个离线区间分块瞎搞算法,只要满足:1.离线  2.可以O(1)从区间(L,R)更新到(L±1, ...

  9. 2018.10.23 NOIP训练 Leo的组合数问题(组合数学+莫队)

    传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单 ...

随机推荐

  1. 网页开发中调用iframe中的函数或者是dom元素

    iframe中的代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  2. =面试题:java面试基本方向 背1 有用 项目二技术学完再看

    一.Java基础 1. 集合框架A)集合中泛型优点? 将运行期的ClaasCastException 转到编译期异常.  泛型还提供通配符 1)HashMap---允许一个键为null,允许多个值为n ...

  3. Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新

    Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新 摘自: https://blog.csdn.net/johnson_moon/article/details/7887449 ...

  4. 简单的Cookie记录浏览记录案例

    books.jsp 界面 代码 <%@ page contentType="text/html;charset=UTF-8" language="java" ...

  5. [存储过程]中的事务(rollback)回滚

    在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... del ...

  6. iPhone的home键进果汁了,按起来粘粘的感觉

    解决办法是按住home键转动一下,再用棉签蘸点水或者酒精都行(注意:水不要太多,不能让水渗进去),用棉签按压home 键多转几圈就好了.

  7. 第18章-使用WebSocket和STOMP实现消息功能

    Spring 4.0为WebSocket通信提供了支持,包括: 发送和接收消息的低层级API: 发送和接收消息的高级API: 用来发送消息的模板: 支持SockJS,用来解决浏览器端.服务器以及代理不 ...

  8. 编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员

    建议33:避免在泛型类型中声明静态成员 在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList&l ...

  9. MySQL性能调优与架构设计——第4章 MySQL安全管理

    第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...

  10. JSP+JDBC实现在可视化页面中插入数据到SQL数据库

    原创 本篇博客创建一个如下图所示的JSP页面,将用户填入的数据插入到对应的数据库中. JSP页面代码: <%@ page language="java" contentTyp ...