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 ...
随机推荐
- flask 基础语法学习
回顾 #6行flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): ret ...
- 用户认证授权和Shiro入门
1.权限管理基础(认证和授权): 前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习S ...
- VMware 常见问题及解决办法
Ø 简介 本文介绍使用 VMware 虚拟机时常见的问题及解决办法,主要包括: 1. 虚拟机操作系统装好后,每次进入虚拟机还进入安装程序 2. 虚拟机不能与主机复制粘帖 3. 解决错误: ...
- System系统类
System系统类 : 主要的作用是用于获取系统的一个参数. System类需要掌握的方法: arraycopy(Object src, int srcPos, Object dest, int de ...
- html常用标签的取值和赋值操作
我们在html页面当中,面对各种各样的标签,经常需要处理取值和赋值的问题,下面,就把常见的一些html标签元素的取值和赋值操作进行总结整理,以后备用. 1.button:改变button按钮上面的值, ...
- IDEA (mac版)
mac键:option=alt command=ctrl idea快捷键 command+Enter(get,set界面) command+alt+L (格式化代码) ctrl+shift+space ...
- This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的2 NO SQL 没有SQl语句,当然也不会修改数据3 READS SQL DATA 只是读取数据 ...
- ef mysql
App.config <configuration> <configSections> <!-- For more information on Entity Frame ...
- Docker-----常见问题
docker中删除dead状态的容器 其现象如下:docker ps -a docker rm ytn删除时报错如下:解决方法: 先查出其进程,kill掉,在进行删除 查 ,复制上图白底部分,用以下命 ...
- 使用Lottie将AE项目转换为 Web 原生动画
使用Lottie转换AE项目为 Web 原生动画 首先打开链接https://github.com/airbnb/lottie-web/blob/master/build/extension/body ...