Problem B. Harvest of Apples

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 2970    Accepted Submission(s): 1153

Problem Description
There are n apples on a tree, numbered from 1 to n.
Count the number of ways to pick at most m apples.
 
Input
The first line of the input contains an integer T (1≤T≤105) denoting the number of test cases.
Each test case consists of one line with two integers n,m (1≤m≤n≤105).
 
Output
For each test case, print an integer representing the number of ways modulo 109+7.
 
Sample Input
2
5 2
1000 500
 
Sample Output
16
924129523
 
Source
 
  经过观察可以发现,设S(m,n)=C(0,n)+C(1,n)+.....+C(m,n)的话,S(m,n+1)=2*S(m,n)-C(m,n) , S(m,n-1)=(S(m,n)+C(m,n-1))/2。
  S(m-1,n)=S(m,n)-C(m,n) ,S(m+1,n)=S(m,n)+C(m+1,n),也就是说我们能在O(1)求出来这四个式子,这样就可以用莫队处理了。
分块的时候我错把 q[i].m/M写成了 i/M导致一直T ,是对mi所在的块作为关键字而不是输入的次序。
  

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define LL long long
  4. #define eps 1e-6
  5. #define mod 1000000007
  6. //LL mod=1e9+7;
  7. const int maxn=+;
  8. LL len,p[maxn]={,},inv[maxn]={,},p_inv[maxn]={,},ans[maxn];
  9. int t;
  10. struct Query{
  11. LL n,m,blo;
  12. int id;
  13. bool operator<(const Query&C)const{
  14. if(blo==C.blo) return n<C.n;
  15. return blo<C.blo;
  16. }
  17. }q[maxn];
  18. LL cal(LL a,LL b)
  19. {
  20. if(b>a)
  21. return ;
  22. return p[a]*p_inv[b]%mod*p_inv[a-b]%mod;
  23. }
  24. int main(){
  25. int n,m,i,j,k;
  26. len=sqrt(maxn);
  27. for(i=;i<=;++i){
  28. p[i]=p[i-]*i%mod;
  29. inv[i]=(mod-mod/i)*inv[mod%i]%mod;
  30. p_inv[i]=p_inv[i-]*inv[i]%mod;
  31. }
  32. scanf("%d",&t);
  33. for(i=;i<=t;++i){
  34. scanf("%lld %lld",&q[i].n,&q[i].m);
  35. q[i].id=i;
  36. q[i].blo=q[i].m/len;
  37. }
  38. sort(q+,q++t);
  39. int L=,R=;
  40. LL res=;
  41. for(i=;i<=t;++i){
  42. while(L<q[i].m){
  43. res=(res+cal(R,++L))%mod;
  44. }
  45. while(L>q[i].m){
  46. res=(res+mod-cal(R,L--))%mod;
  47. }
  48. while(R<q[i].n){
  49. res=(res*+mod-cal(R++,L))%mod;
  50. }
  51. while(R>q[i].n){
  52. res=(res+cal(--R,L))%mod*inv[]%mod;
  53. }
  54. ans[q[i].id]=res;
  55. }
  56. for(i=;i<=t;++i)printf("%lld\n",ans[i]);
  57. return ;
  58. }
 

hdu-6333-莫队的更多相关文章

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

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

  2. HDU 6333 莫队+组合数

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

  3. Hdu 5213-Lucky 莫队,容斥原理,分块

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5213 Lucky Time Limit: 6000/3000 MS (Java/Others)    Me ...

  4. HDU 4358 莫队算法+dfs序+离散化

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others)T ...

  5. HDU 4638 (莫队)

    题目链接:Problem - 4638 做了两天莫队和分块,留个模板吧. 当插入r的时候,设arr[r]代表r的位置的数字,判断vis[arr[r-1]]和vis[arr[r+1]]是否访问过,如果两 ...

  6. HDU 4638 莫队算法

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. hdu 5145(莫队算法+逆元)

    NPY and girls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. HDU 6534 莫队+ 树状数组

    题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...

  9. HDU 5145 NPY and girls (莫队分块离线)

    题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...

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

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

随机推荐

  1. Learning to Track at 100 FPS with Deep Regression Networks ECCV 2016 论文笔记

    Learning to Track at 100 FPS with Deep Regression Networks   ECCV 2016  论文笔记 工程网页:http://davheld.git ...

  2. (zhuan) Paper Collection of Multi-Agent Reinforcement Learning (MARL)

    this blog from: https://github.com/LantaoYu/MARL-Papers Paper Collection of Multi-Agent Reinforcemen ...

  3. 【ASP.NET】 MVC下拉框联动

    这个case主要是我在做项目的时候遇到一个需要根据input控件输入的内容,动态填充dropdown list中的内容, 实现二者联动的需求.在搜索了一些资源后,这篇博客解决了我的问题,所以记录并转载 ...

  4. ETCD应用

    etcd:从应用场景到实现原理的全方位解读 ETCD:A highly-available key value store for shared configuration and service d ...

  5. 提高R语言速度--转载

    1.     参考<R语言编程艺术>(Norman Matloff) chapter 14 & chapter 15 2.     方法 (1)向量化 与非向量化-循环做个对比: ...

  6. 简单实现RN调用原生方法(IOS)

    在React Native中,一个“原生模块”就是一个实现了“RCTBridgeModule”协议的Objective-C类(个人理解RCTBridgeModule就是react与native之间的桥 ...

  7. git项目,VSCode显示不同颜色块的含义

    一. 概念 代码里的左侧颜色标识: 红色,未加入版本控制; (刚clone到本地) 绿色,已经加入版本控制暂未提交; (新增部分) 蓝色,加入版本控制,已提交,有改动: (修改部分) 白色,加入版本控 ...

  8. android:ems="10"是什么意思

    android:ems = " 设置TextView或者Edittext的宽度为10个字符的宽度.当设置该属性后,控件显示的长度就为10个字符的长度,超出的部分将不显示. xml中 andr ...

  9. VC静态调用DLL(lib)

    1. #pragma comment(lib, "libxml2.lib")#pragma comment(lib, "iconv.lib")#pragma c ...

  10. EditPlus查找替换

    换行符\n,记得选择正则表达式 1]正则表达式应用——替换指定内容到行尾解决:① 在替换对话框,查找内容里输入“abc.*”② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮其中,符号的含义如 ...