HDU6333-2018ACM暑假多校联合训练1002-Harvest of Apples-莫队+费马小定理
题意很简单啦,求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
Count the number of ways to pick at most m apples.
Each test case consists of one line with two integers n,m (1≤m≤n≤105).
#include <iostream>
#include <cmath>
#include <algorithm> using namespace std; const int maxn = 1e5 + ;
const int mod = 1e9 + ;
const int MAX = 1e5;
int pos[maxn];
long long ans[maxn];
long long jx[maxn];
long long jxny[maxn]; struct node
{
int l, r;
int id;
bool operator < (node a) const
{
if (pos[id] == pos[a.id])
return r < a.r;
return pos[id] < pos[a.id];
}
}q[maxn]; long long quick_mod(long long n, long long m)
{
long long ret = ;
while (m>) {
if (m & ) ret = ret * n%mod;
n = n * n%mod;
m >>= ;
}
return ret;
}//快速幂 void init() {
jx[] = ;
for (int i = ; i <= MAX; i++) {
jx[i] = (jx[i - ] * i) % mod;
}
jxny[MAX] = quick_mod(jx[MAX], mod - );
for (int i = MAX - ; i >= ; i--) {
jxny[i] = jxny[i + ] * (i + ) % mod;
}
}//预处理阶乘和逆元 long long get(int l, int r)
{
if (r > l)
return ;
return jx[l] * jxny[r] % mod * jxny[l - r] % mod;
} int main()
{
init();
ios::sync_with_stdio(false);
int t;
cin >> t;
int sq = sqrt();
for (int i = ; i < t; i++)
{
cin >> q[i].l >> q[i].r;
q[i].id = i;
pos[i] = q[i].l / sq;
} sort(q,q+t); int l = , r = ;
long long num = ;
for (int i = ; i < t; i++)
{
while (l < q[i].l)
{
num = (num * + mod - get(l,r)) % mod;
l++;
}
while (l > q[i].l)
{
l--;
num = (num + get(l, r)) * quick_mod(, mod - ) % mod;
}
while (r < q[i].r)
{
r++;
num = (num + get(l, r) + mod) % mod;
}
while (r > q[i].r)
{
num = (num - get(l, r) + mod) % mod;
r--;
}
ans[q[i].id] = num;
} for (int i = ; i < t; i++)
cout << ans[i] << endl; return ;
}
HDU6333-2018ACM暑假多校联合训练1002-Harvest of Apples-莫队+费马小定理的更多相关文章
- 牛客训练四:Applese 涂颜色(费马小定理+快速幂)
题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...
- HDU-6333 Problem B. Harvest of Apples 莫队
HDU-6333 题意: 有n个不同的苹果,你最多可以拿m个,问有多少种取法,多组数据,组数和n,m都是1e5,所以打表也打不了. 思路: 这道题要用到组合数的性质,记S(n,m)为从n中最多取m个的 ...
- HDU6400-2018ACM暑假多校联合训练1004-Parentheses Matrix-构造
Parentheses Matrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- HDU6336-2018ACM暑假多校联合训练4-1005-Problem E. Matrix from Arrays-前缀和
题意是给了一种矩阵的生成方式 让你求两个左边之间的矩阵里面的数加起来的和(不是求矩阵的值) 没看标程之前硬撸写了160行 用了前缀和以后代码量缩短到原来的1/3 根据规律可以推导出这个矩阵是在不断重复 ...
- 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 ...
- HDU6330-2018ACM暑假多校联合训练Problem L. Visual Cube
就是画个图啦 分三个平面去画orz #include <iostream> #include <cmath> #include <cstring> #include ...
- HDU6318-2018ACM暑假多校联合训练2-1010-Swaps and Inversions-树状数组
本题题意是,给你一个长度为n的序列,使用最少的操作把序列转换为从小到大的顺序,并输出操作数*min(x,y) 实质上是算出该序列中有多少逆序对,有归并排序和树状数组两种算法,由于数据之间的差值有点大, ...
- HDU6299-2018ACM暑假多校联合训练1002-Balanced Sequence
这个题的题意是给你n个字符串,认定()是一种平衡的串,两个以上连续的()()也是一种平衡的串,如果一对括号里面包含一个平衡的串,这个括号也被算在这个平衡的串之内, 如(()(()))是一个长度为8的平 ...
- HDU6298-2018ACM暑假多校联合训练1001-Maximum Multiple
题意大致是给你一个整数n,让你确定是否有三个正整数x,y,z既能被n整除,又能x+y+z=n,并使xyz最大 从中根据规律可以看出,只有被3或被4整除的数才能满足题目要求 被3整除的最大值为n^3/3 ...
随机推荐
- Ajax 简单实例,其实就是js里面内容有些不同而已(转载)
这些时间,瞎子也看得见,AJAX正大踏步的朝我们走来.不管我们是拥护也好,反对也罢,还是视而不见,AJAX像一阵潮流,席转了我们所有的人. 关于AJAX的定义也好,大话也好,早有人在网上发表了汗牛充栋 ...
- c++之带默认形参值的函数
先来个例子: #include <iostream> using namespace std; ,){ return x+y; } int main(){ //freopen(" ...
- 五分钟带你入门TensorFlow
TensorFlow是Google开源的一款人工智能学习系统.为什么叫这个名字呢?Tensor的意思是张量,代表N维数组:Flow的意思是流,代表基于数据流图的计算.把N维数字从流图的一端流动到另一端 ...
- Maven面试宝典啊
一.Maven有哪些优点和缺点 优点如下: 简化了项目构建.依赖管理: 易于上手,对于新手可能一个"mvn clean package"命令就可能满足他的工作 便于与持续集成工具( ...
- Hibernate入门级实例
一.开发环境 Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL 说明:其实Hibernate是非常独立的框架,根本不需要MyEclipse,Eclipse,T ...
- (转).Net有哪些大型项目、大型网站的案例?
[分享].Net有哪些大型项目.大型网站的案例? .Net开发的部分知名网站案例:http://www.godaddy.com 全球最大域名注册商http://www.ips.com 环迅支付 ...
- Java 读取jar内的文件的超简便方法
坑爹的java课程设计,偏要用jar来运行 读取.存储jar内文件的支持也好低 存储方法: 进入jar文件其实没有说的那么困难,jar文件本质是一个zip格式的压缩文件,只是把文件后缀名改了,要用Ja ...
- 基于CacheManager组件的缓存产品配置
一.Couchbase 使用CacheManager组件,在配置Couchbase缓存支持时,由于对配置节cache handle命名规则要求不了解,费了点时间查了源码才明白. section配置节 ...
- ORACLE B-TREE(B树)索引
内容简介: 1.普通B-TREE 索引; 2.唯一B-TREE 索引; 3.复合索引; ORACLE 默认的索引类型为B-TREE 索引,表中的行标识符(ROWID)和行相关的列值被存储在一个平衡树的 ...
- MySQL 存储过程和存储函数学习
#一.存储过程和存储函数的创建案例 CREATE PROCEDURE myprocedure(in a int,in b int ,OUT c INT) BEGIN set c=a+b; end; c ...