题意很简单啦,求S(n,m)的值

通过打表我们可以知道

S(n + 1, m) = S(n, m) * 2 - C(n, m);

S(n - 1, m) = (S(n, m) + C(n - 1, m)) / 2;

首先我们考虑杨辉三角和二项式定理,但是看了看数据情况,貌似时间不允许呢

这个时候就要祭出莫队算法啦,关于莫队算法呢,更详细的理解请看:2010国家集训队《小Z的袜子》命题报告

莫队算法是一种用于解决可离线的,求区间[L,R]问题的算法

这个题当然就可以离线去求啦,莫队算法在解决离线区间询问几乎是无敌的(分块大法好),复杂度在O(n^3/2)左右

那这个题也妥妥的稳过了

这个题由于在处理阶乘的时候会出现被取余的情况,所以在计算C(L,R)进行除运算阶乘时,计算会不正确,这时候就需要用到费马小定理去计算逆元啦

费马小定理:假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。

Problem B. Harvest of Apples

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

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
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int maxn = 1e5 + ;
  8. const int mod = 1e9 + ;
  9. const int MAX = 1e5;
  10. int pos[maxn];
  11. long long ans[maxn];
  12. long long jx[maxn];
  13. long long jxny[maxn];
  14.  
  15. struct node
  16. {
  17. int l, r;
  18. int id;
  19. bool operator < (node a) const
  20. {
  21. if (pos[id] == pos[a.id])
  22. return r < a.r;
  23. return pos[id] < pos[a.id];
  24. }
  25. }q[maxn];
  26.  
  27. long long quick_mod(long long n, long long m)
  28. {
  29. long long ret = ;
  30. while (m>) {
  31. if (m & ) ret = ret * n%mod;
  32. n = n * n%mod;
  33. m >>= ;
  34. }
  35. return ret;
  36. }//快速幂
  37.  
  38. void init() {
  39. jx[] = ;
  40. for (int i = ; i <= MAX; i++) {
  41. jx[i] = (jx[i - ] * i) % mod;
  42. }
  43. jxny[MAX] = quick_mod(jx[MAX], mod - );
  44. for (int i = MAX - ; i >= ; i--) {
  45. jxny[i] = jxny[i + ] * (i + ) % mod;
  46. }
  47. }//预处理阶乘和逆元
  48.  
  49. long long get(int l, int r)
  50. {
  51. if (r > l)
  52. return ;
  53. return jx[l] * jxny[r] % mod * jxny[l - r] % mod;
  54. }
  55.  
  56. int main()
  57. {
  58. init();
  59. ios::sync_with_stdio(false);
  60. int t;
  61. cin >> t;
  62. int sq = sqrt();
  63. for (int i = ; i < t; i++)
  64. {
  65. cin >> q[i].l >> q[i].r;
  66. q[i].id = i;
  67. pos[i] = q[i].l / sq;
  68. }
  69.  
  70. sort(q,q+t);
  71.  
  72. int l = , r = ;
  73. long long num = ;
  74. for (int i = ; i < t; i++)
  75. {
  76. while (l < q[i].l)
  77. {
  78. num = (num * + mod - get(l,r)) % mod;
  79. l++;
  80. }
  81. while (l > q[i].l)
  82. {
  83. l--;
  84. num = (num + get(l, r)) * quick_mod(, mod - ) % mod;
  85. }
  86. while (r < q[i].r)
  87. {
  88. r++;
  89. num = (num + get(l, r) + mod) % mod;
  90. }
  91. while (r > q[i].r)
  92. {
  93. num = (num - get(l, r) + mod) % mod;
  94. r--;
  95. }
  96. ans[q[i].id] = num;
  97. }
  98.  
  99. for (int i = ; i < t; i++)
  100. cout << ans[i] << endl;
  101.  
  102. return ;
  103. }

HDU6333-2018ACM暑假多校联合训练1002-Harvest of Apples-莫队+费马小定理的更多相关文章

  1. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)

    题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...

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

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

  3. HDU6400-2018ACM暑假多校联合训练1004-Parentheses Matrix-构造

    Parentheses Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Oth ...

  4. HDU6336-2018ACM暑假多校联合训练4-1005-Problem E. Matrix from Arrays-前缀和

    题意是给了一种矩阵的生成方式 让你求两个左边之间的矩阵里面的数加起来的和(不是求矩阵的值) 没看标程之前硬撸写了160行 用了前缀和以后代码量缩短到原来的1/3 根据规律可以推导出这个矩阵是在不断重复 ...

  5. HDU6342-2018ACM暑假多校联合训练4-1011-Problem K. Expression in Memories

    Problem K. Expression in Memories Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262 ...

  6. HDU6330-2018ACM暑假多校联合训练Problem L. Visual Cube

    就是画个图啦 分三个平面去画orz #include <iostream> #include <cmath> #include <cstring> #include ...

  7. HDU6318-2018ACM暑假多校联合训练2-1010-Swaps and Inversions-树状数组

    本题题意是,给你一个长度为n的序列,使用最少的操作把序列转换为从小到大的顺序,并输出操作数*min(x,y) 实质上是算出该序列中有多少逆序对,有归并排序和树状数组两种算法,由于数据之间的差值有点大, ...

  8. HDU6299-2018ACM暑假多校联合训练1002-Balanced Sequence

    这个题的题意是给你n个字符串,认定()是一种平衡的串,两个以上连续的()()也是一种平衡的串,如果一对括号里面包含一个平衡的串,这个括号也被算在这个平衡的串之内, 如(()(()))是一个长度为8的平 ...

  9. HDU6298-2018ACM暑假多校联合训练1001-Maximum Multiple

    题意大致是给你一个整数n,让你确定是否有三个正整数x,y,z既能被n整除,又能x+y+z=n,并使xyz最大 从中根据规律可以看出,只有被3或被4整除的数才能满足题目要求 被3整除的最大值为n^3/3 ...

随机推荐

  1. 安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】

    一.基本步骤: 1.VMware Workstation菜单栏中,选择“虚拟机”,”安装VMware Tools...“. 2.挂载VMware Tools安装程序到/mnt/cdrom/. mkdi ...

  2. 这几天搞UNITY遇到的坑

    都是在IPHONE设备上遇到的,UNITY版本是5.4.4f1 1.EASY AR出现扫描蓝线绿块的,是因为不是EASY AR的CameraDeviceBehavior默认参数1280X720 2.自 ...

  3. 文件操作getc

    getc函数的作用是从打开的文件中获取一个字符,并加文件指针自动加1,获取的字符在返回值中. 我写了一个读取一个文件255个字节的程序. int main() { FILE *p; fopen_s(& ...

  4. [Schema] I have updated my XML Schema for my service but SoapUI still generates/validates according to the old schema.

    SoapUI caches XML schemas when they are first loaded. If you need to force a reload of an interfaces ...

  5. CENTOS7 YUM安装BOOST1.53(静态版本)

    按照之前的博文更新163的源之后,执行: yum install boost-static.i686 yum install boost-devel.i686 yum install boost-do ...

  6. [GO]结构体指针类型匿名字段

    package main import "fmt" type Person struct { name string sex byte age int } type Student ...

  7. Qcreator3.1.2调试器(windows)版本

    环境:visual studio 2012 qt:5.3.1 默认的ms版本qtcreator只能使用visual studio的编译器,不能使用调试工具.需要gdb或者cdb进行调试,这里介绍使用的 ...

  8. IIS请求筛选模块被配置为拒绝包含双重转义序列的请求404.11

    文件目录有这样一个包含了加号的文件:2015年日历表(A4+版).pdf 现在要求下载此文件,考虑这样一个url /UploadFile/2015年日历表(A4+版).pdf 如果在浏览器访问这个ur ...

  9. [Selenium With C#基础教程] Lesson-04 按钮

    作者:Surpassme 来源:http://www.jianshu.com/p/83d7416c4b7d 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. Button通常有两 ...

  10. 响应者链条,iOS中touchs事件的处理流程。

    用户在使用app的时候,会产生各样的事件.在iOS中的事件可以分为三种 触摸事件(Touch Event) 加速计事件(Accelerometer Event) 远程控制事件(Remote Contr ...