链接:https://ac.nowcoder.com/acm/contest/925/I
来源:牛客网

题目描述

n个不同的滑稽果中,每个滑稽果可取可不取,从所有方案数中选取一种,求选取的方案中滑稽果个数不超过m的概率。(对109+7取模)

输入描述:

第一行一个正整数T( T <= 10^5 )

随后T行每行两个整数n,m ( 0 < m <= n <= 10^5 )

输出描述:

T行,每行一个整数表示答案。
示例1

输入

复制

2
5 2
5 1

输出

复制

500000004
687500005 题意:要你求取的数量不超过m的数量的概率
思路:首先因为组合数太大,我们就只能用Lucas 来求
其次这个数据范围太大,我们肯定不能直接暴力求出组合数
这里我们把 s(m,n) 设为 从n个中选取至多m个物品的方案数,我们可以得出 s(m,n) = s(m-1,n) + c(m,n)
我们还可以用杨辉三角得出 s(m,n)= 2 * s(m,n-1)*2-c(m,n-1)
s(4,8) = c(0,8) + c(1,8) + c(2,8) + c(3,8) + c(4,8)
s(4,7) = c(0,7) + c(1,7) + c(2,7) + c(3,7) + c(4,7)
我们可以借由定理:c(m,n)+c(m+1,n) = c(m+1,n+1)
c(0,8)=c(0,7)
c(1,8)=c(0,7)+c(1,7)
c(2,8)=c(1,7)+c(2,7)
c(3,8)=c(2,7)+c(3,7)
c(4,8)=c(3,7)+c(4,7)

我们把m-n当成一个线段,我们就可以让s(m,n) ->   s(m+1,n),s(m-1,n),s(m,n+1),s(m,n-1);
我们可以进行O(1)转移,这里我们就好办了,我们用莫队离线排序查询然后进行转移
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define IO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define P 1000000007
#define mod 1000000007
#define N 100010
#define LL long long
using namespace std;
typedef long long ll;
struct query{int l,r,block,id;} Q[N];
LL w[N],inv[N],ans[N]; bool cmp(query a,query b)
{
if (a.block!=b.block) return a.l<b.l;
if (a.block&) return a.r<b.r; return a.r>b.r;
} LL C(int r,int l)
{
if (r<l) return ;
return w[r]*inv[l]%P*inv[r-l]%P;
} ll quick_pow(ll a,ll b){
ll ans=;
while(b){
if(b&) ans=(ans*a)%mod;
a=(a*a)%mod;
b=b/;
}
return ans;
}
int main()
{
w[]=;w[]=;inv[]=; inv[]=;
for (int i=;i<N;i++)
{
w[i]=w[i-]*i%P;
inv[i]=inv[P%i]*(P-P/i)%P;
}
for (int i=;i<N;i++) inv[i]=inv[i-]*inv[i]% P;
int block=sqrt();
int n;
cin>>n;
for (int i=;i<=n;i++)
{
cin>>Q[i].r>>Q[i].l;
Q[i].id=i;Q[i].block=Q[i].l/block;
}
int l=,r=;LL t=;
sort(Q+,Q+n+,cmp);
for (int i=;i<=n;i++)
{
while(l<Q[i].l)
{
t=(t+C(r,l+))%P;
l++;
}
while (l>Q[i].l)
{
l--;
t=(t-C(r,l+)+P)%P;
}
while (r<Q[i].r)
{
r++;
t=(*t-C(r-,l)+P)%P;
}
while(r>Q[i].r)
{
t=(t+C(r-,l))*inv[]%P;
r--;
}
ll sum=quick_pow((ll),Q[i].r);
sum=quick_pow(sum,mod-);
ans[Q[i].id]=(t*sum)%mod;
//ans[Q[i].id]=sum;
}
for (int i=;i<=n;i++)cout<<ans[i]<<endl;
return ;
}


吉首大学校赛 I 滑稽树上滑稽果 (Lucas + 莫队)的更多相关文章

  1. U68464 滑稽树上滑稽果(guo)

    U68464 滑稽树上滑稽果(guo) 题目描述 小小迪有 n 个约会对象,每个对象有一个约会时长 p[i],小小迪 想尽可能多的去完成他的约会(假设小小迪可以瞬移),每个对象还有 一个忍耐时间 q[ ...

  2. 吉首大学2019年程序设计竞赛(重现赛)I 滑稽树上滑稽果 (莫队+逆元打表)

    链接:https://ac.nowcoder.com/acm/contest/992/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K  ...

  3. UOJ 58 (树上带修改的莫队)

    UOJ 58 糖果公园 Problem : 给一棵n个点的树,每个点上有一种颜色,对于一条路径上的点,若 i 颜色第 j 次出现对该路径权值的贡献为 w[i] * c[j], 每次询问一条路径的权值, ...

  4. 7.11 NOI模拟赛 qiqi20021026的T1 四个指针莫队 trie树

    LINK:qiqi20021026的T1 考场上只拿到了50分的\(nq\)暴力. 考虑一个区间和一个区间配对怎么做 二分图最大带权匹配复杂度太高. 先考虑LCS的问题 常见解决方法是后缀数组/tri ...

  5. UOJ370 滑稽树上滑稽果 【状压DP】

    题目分析: 答案肯定是链,否则可以把枝干放到主干. 去除一直存在的位,这样0位占满时就会结束. 用$f[S]$表示0位填埋情况,每次转移是它的一个子集,我们考虑可否转移. 再用$g[S]$存储转移是否 ...

  6. 【做题】uoj#370滑稽树上滑稽果——巧妙dp

    一个显然的结论是最终树的形态必然是一条链.具体证明只要考虑选定树上的某一条链,然后把其他部分全部接在它后面,这样答案一定不会变劣. 那么,一开始的想法是考虑每一位的最后出现位置,但这并不容易实现.注意 ...

  7. UOJ#370. 【UR #17】滑稽树上滑稽果 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ370.html 题解 首先易知答案肯定是一条链,因为挂在链的最下面肯定比挂在其他节点上赚. 问题被转化成了从一个集合中不断 ...

  8. A. 【UR #17】滑稽树上滑稽果

    题解: 首先很显然的是这是一条链(特殊数据说是链是故意让人迷茫的??) 然后 自己就开始yy 觉得每一次是加入一个使得当前值最小的数 然而这tm又是特殊数据?? 那就写一波发现是错的 考虑一下特殊数据 ...

  9. UOJ#370. 【UR #17】滑稽树上滑稽果

    $n \leq 1e5$个点,每个点有个权值$a_i \leq 2e5$.现将点连成树,每个点$i$的链接代价为$a_i \ \ and \ \ i父亲的代价$,这里的$and$是二进制按位与,求最小 ...

随机推荐

  1. Python--模块之time、random、os、hashlib

    今天开始模块. 首先补充 __init__.py       在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中 ...

  2. sql-主键、外键、索引

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  3. UNP学习第五章(二)

    一.POSIX信号处理 信号:告知某进程发生了某个事件的通知(软中断),通常是异步的. 信号可以:由进程发给另一个进程,由内核发给某个进程. 设置信号处理办法,有三个选择: 1.写一个函数,在信号发生 ...

  4. 「NOI2017」整数 解题报告

    「NOI2017」整数 有一些比较简单的\(\log^2n\)做法 比如暴力在动态开点线段树上维护每个位置为\(0\)还是\(1\),我们发现涉及到某一位加上\(1\)或者减去\(1\)实际上对其他位 ...

  5. percona-toolkit工具包的安装和初步使用

    percona-toolkit工具包的安装和初步使用 原文地址:http://blog.csdn.net/yumushui/article/details/42919601 一.percona-too ...

  6. 10个优秀的 Web UI库/框架

    UI(User Interface)即用户界面,也称人机界面.是指用户和某些系统进行交互方法的集合,实现信息的内部形式与人类可以接受形式之间的转换.本文为WUI用户整理了10个优秀的 Web UI 库 ...

  7. SqlSession(SqlSessionTemplate类) 实现Mybatis

    yBatis3与spring整合之使用SqlSession(SqlSessionDaoTemplate类) ---------- 注:这是手工编写实现的方式(其实可以直接使用注入映射器的) SqlSe ...

  8. 图片模式CMYK和RGB在浏览器下的变化

    手机浏览器里面不能显示出模式为CMYK的图片, 模式为CMYK的图片在IE浏览器里面显示和模式为RGB的一样 模式为CMYK的图片在火狐里面显示有色差

  9. selenium V1.0和V2.0差别对比

    Selenium 1.0 Selenium 1.0版本,就是大家所熟知的Selenium RC,其中 RC 是 Remote Control 的缩写.Selenium RC 的工作原理是 利用 Jav ...

  10. 9.Jmeter自定义Sample(自定义测试内容)完成测试

    问题:在某些场景下我们会发现Jmeter里面提供的各种Sample不能满足自己的需求,应为这个世界上的压力测试的逻辑本来就是千变万化的,所以这个时候我们如果自己实现一套测试逻辑(当Jmeter的基本e ...