2018年多校第四场第二题 B. Harvest of Apples hdu6333
题意:给定10^5以内的n,m求∑组合数(n,i),共10^5组数据。
题解:
定义 S(n, m) = \sum_{i = 0} ^ {m} {n \choose i}S(n,m)=∑i=0m(in),
不难发现 S(n, m) = S(n, m - 1) + {n \choose m}, S(n, m) = 2S(n - 1, m) - {n - 1 \choose m}S(n,m)=S(n,m−1)+(mn),S(n,m)=2S(n−1,m)−(mn−1)。
也就是说,如果我们知道 S(n, m)S(n,m),就能以 O(1)O(1) 的代价计算出 S(n - 1, m), S(n, m - 1), S(n + 1, m), S(n, m + 1)S(n−1,m),S(n,m−1),S(n+1,m),S(n,m+1),
可以采用莫队算法。
时间复杂度 O(T \sqrt{MAX})O(T√MAX)。
我的理解:其中还有一个难点就是O(1)求组合数,首先预处理出所有maxn个阶乘,以及阶乘的逆元(求得过程中因为只涉及乘法加法所以无脑mod即可),然后有一点是
从大到小,n!的逆元=(n+1)!逆元*(n+1)(写出来就懂了,把分母的(n+1)翻上去即可)或者一个一个用费马小定理求,也不会超时。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
#include<queue>
#define maxn 100010
#define MOD 1000000007
using namespace std; 
int T;
int l,n,m;
int  len; 
long long a[maxn+1],b[maxn+1];
long long ans[maxn+1];
struct Q{
	int L,R,ID,block;
	Q(){}
	Q(int l,int r,int id):L(l),R(r),ID(id)
	{
		block=l/len;
	}
	bool operator <(const Q A)
	{
		if(block<A.block)return true;
		else if(block==A.block&&R<A.R)return true;
		return false;
	} 
}q[maxn+1];
long long powi(long long x,long long y)
{
	long long tmp=x;
	long long out=1;
	while(y)
	{
		if(y%2==1)
			out=tmp*out%MOD;
		tmp=tmp*tmp%MOD;
		y=y/2;
	}
	return out;
}
long long C(long long L,long long R)
{
	return a[R]*b[L]%MOD*b[R-L]%MOD;
}
int main()
{
	scanf("%d",&T);
	int cnt=T;
	a[0]=1;
	for(int i=1;i<=maxn;i++)a[i]=i*a[i-1]%MOD;
	b[maxn]=powi(a[maxn],MOD-2);
	for(int i=maxn-1;i>=0;i--)b[i]=b[i+1]*(i+1)%MOD;
	len=int(sqrt(maxn));
	while(T--)
	{
		scanf("%d%d",&n,&m);
		q[cnt-T]=Q(m,n,cnt-T);
}
	sort(q+1,q+cnt);
	int lt=0,rt=0;
	long long anst=1;
	for(int i=1;i<=cnt;i++)
	{
		int l=q[i].L,r=q[i].R;
		while(lt>l){anst=(anst-C(lt,rt)+MOD)%MOD;lt--;}
		while(rt<r){anst=(2*anst-C(lt,rt)+MOD)%MOD;rt++;}
		while(lt<l){anst=(anst+C(lt+1,rt))%MOD;lt++;}
		while(rt>r){anst=(anst+C(lt,rt-1))*b[2]%MOD;rt--;}
		ans[q[i].ID]=anst;
	}
	for(int i=1;i<=cnt;i++)
	{
		printf("%lld\n",ans[i]);
	}
}
2018年多校第四场第二题 B. Harvest of Apples hdu6333的更多相关文章
- 2018 HDU多校第四场赛后补题
		2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ... 
- Problem E. Matrix from Arrays(杭电2018年多校第四场+思维+打表找循环节)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6336 题目: 题意:给你一个l个元素的数组a,用题目中的程序构造一个新的矩阵,询问q次,问以(x1,y ... 
- 2018年多校第三场第一题 A. Ascending Rating hdu6319
		比赛地址:http://acm.hdu.edu.cn/contests/contest_show.php?cid=804 题目编号:第一题 A. Ascending Rating hdu6319 题 ... 
- 2019年牛客多校第四场 B题xor(线段树+线性基交)
		题目链接 传送门 题意 给你\(n\)个基底,求\([l,r]\)内的每个基底是否都能异或出\(x\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ... 
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
		目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ... 
- 2018 HDU多校第三场赛后补题
		2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ... 
- 牛客多校第四场sequence C (线段树+单调栈)
		牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ... 
- 2020牛客多校第八场K题
		__int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ... 
- 《学习OpenCV》练习题第四章第二题
		#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ... 
随机推荐
- Maven 学习总结 (七) 之 灵活构建
			一个优秀的构建系统必须足够灵活,他应该能够让项目在不同的环境下都能成功地构建.Maven为支持项目的灵活性,内置了三大特性,即属性.Profile和资源过滤. Maven属性 通过<proper ... 
- 新装的SSMS一打开就显示VS许可证过期,但VS又运行正常,解决方法。
			1.出现问题如下图: 2.解决方法 打开控制面板->程序卸载->找到Microsoft Visual Studio *** Shell(****),右击-修复. 3.修复好了,然后重启电脑 ... 
- 简单文本悬浮div提示效果
			<html> <head> <script src="jquery-1.9.1.min.js" type="text/javascript& ... 
- Eclipse使用Git检出项目
			1.打开Eclipse——File——Import...: 2.在弹出的Import框中选择Git——Projects from Git——NEXT: 3.选择Clone URI——Next: 4.输 ... 
- IMDB-二分类问题
			from keras.datasets import imdb from keras.utils.np_utils import to_categorical import numpy as np f ... 
- java学习笔记10-方法
			我们经常用到System.out.println(),它到底是什么? System是系统类 out是系统类的标准输出对象 println()是一个方法 也就是说是调用了System类中的标准输出对象o ... 
- 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
			抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家.. 1.楼主首先使用Fiddler4来抓取手机抖音app这 ... 
- flask蓝图的简单使用
			1.flask的简单使用 from flask import Flask # from flask import make_response app = Flask(__name__) app.con ... 
- memcache的基本操作
			1.linux下启动memcache [root@localhost ~]# memcached -d -m 512 -u root -p 12266 -c 256 参数名称及意义: -d 以守护 ... 
- Django-ORM-单表操作
			ORM字段参数及单表操作 一.字段参数 1.字段 AutoField(Field) #当model中如果没有自增列,则会自动创建一个列名为id的列 -int 自增列,必须填入参数primary_key ... 
