首先令$n=r-l+1$。

令$k$表示区间$[l,r]$中存在多少个数$x$,使得$x$不存在小于$x$且在区间$[l,r]$中的因数,我们把包含这些数的数集称为$S$

我们来先想一个$O(nk)$的$min-max$容斥做法吧。。。。。

显然这一题我们可以转化为min-max容斥的模型(将这k个数选完期望需要选多少次)

$max_{S}=\sum_{T∈S}(-1)^{|T+1|}min_{T}$。

令$P_x=\sum_{T∈S\ and\ |T|=x} min_{T}$。

我们推一推式子就会发现$P_i=x!(n-x)!\sum_{i=1}{n-k+1}i\binom{n-i}{k-i}$。

然后我们发现这个式子是$O(n^2)$的,而且非常难以推出。

代码如下(这个代码可能有点假)

 #include<bits/stdc++.h>
#define L long long
#define MOD 1000000007
#define M 10000005
using namespace std; L pow_mod(L x,L k){L ans=; for(;k;k>>=,x=x*x%MOD) if(k&) ans=ans*x%MOD; return ans;}
L fac[M]={},invfac[M]={};
L C(int n,int m){return fac[n]*invfac[m]%MOD*invfac[n-m]%MOD;} int vis[M]={};
int n,k=; L p[M]={}; int main(){
fac[]=; for(int i=;i<M;i++) fac[i]=fac[i-]*i%MOD;
invfac[M-]=pow_mod(fac[M-],MOD-);
for(int i=M-;~i;i--) invfac[i]=invfac[i+]*(i+)%MOD; int l,r; cin>>l>>r; n=r-l+;
for(int i=l;i<=r;i++){
if(vis[i]) continue;
k++;
for(int j=i;j<=r;j+=i) vis[j]=;
} for(int x=;x<=k;x++){
L now=;
for(int i=;i<=n-x+;i++){
L s=i;
for(int j=;j<x;j++) s=s*(n-i-j+)%MOD;
now=(now+s)%MOD;
}
p[x]=now*x%MOD*fac[n-x]%MOD;
}
L ans=;
for(L x=,zf=;x<=k;x++,zf=-zf){
ans=(ans+zf*p[x]*C(k,x)%MOD+MOD)%MOD;
}
cout<<ans<<endl;
}

考虑一些简单的方法

我们考虑回题目中的枚举排列。令$F_i$表示 $t(p)=i$的排列个数,那么答案显然为$\sum_{i=k}^{n}F_i$

不难发现,一种$t(p)=i$的排列,其前$i-1$项中必包含有数集$S$中$k-1$个数,且第i个数必为数集$S$中的数。

那么不难求出$F_i=k(n-k)!\dfrac{i!}{(i-k)!}$

答案即为$k(n-k)!\sum_{i=k}^{n} \dfrac{i!}{(i-k)!}$

随便求一求就好了

 #include<bits/stdc++.h>
#define L long long
#define MOD 1000000007
#define M 10000005
using namespace std; L pow_mod(L x,L k){L ans=; for(;k;k>>=,x=x*x%MOD) if(k&) ans=ans*x%MOD; return ans;}
L fac[M]={},invfac[M]={};
L C(int n,int m){return fac[n]*invfac[m]%MOD*invfac[n-m]%MOD;} int vis[M]={};
int n,k=; L p[M]={}; int main(){
fac[]=; for(int i=;i<M;i++) fac[i]=fac[i-]*i%MOD;
invfac[M-]=pow_mod(fac[M-],MOD-);
for(int i=M-;~i;i--) invfac[i]=invfac[i+]*(i+)%MOD; int l,r; cin>>l>>r; n=r-l+;
for(int i=l;i<=r;i++){
if(vis[i]) continue;
k++;
for(int j=i;j<=r;j+=i) vis[j]=;
}
L ans=k*fac[n-k]%MOD,sum=;
for(int i=k;i<=n;i++)
sum=(sum+fac[i]*invfac[i-k])%MOD;
cout<<ans*sum%MOD<<endl;
}

【jxoi2018】游戏 组合数学的更多相关文章

  1. luogu P4562 [JXOI2018]游戏 组合数学

    LINK:游戏 当L==1的时候 容易想到 答案和1的位置有关. 枚举1的位置 那么剩下的方案为(R-1)! 那么总答案为 (R+1)*R/2(R-1)! 考虑L==2的时候 对于一个排列什么时候会终 ...

  2. 洛谷P4562 [JXOI2018]游戏(组合数学)

    题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...

  3. 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)

    [BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...

  4. [JXOI2018]游戏 (线性筛,数论)

    [JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...

  5. 【题解】JXOI2018游戏(组合数)

    [题解]JXOI2018游戏(组合数) 题目大意 对于\([l,r]\)中的数,你有一种操作,就是删除一个数及其所有倍数.问你删除所有数的所有方案的步数之和. 由于这里是简化题意,有一个东西没有提到: ...

  6. BZOJ5323 JXOI2018游戏(线性筛+组合数学)

    可以发现这个过程非常类似埃氏筛,将在该区间内没有约数的数定义为质数,那么也就是求每种方案中选完所有质数的最早时间之和. 于是先求出上述定义中的质数个数,线性筛即可.然后对每个最短时间求方案数,非常显然 ...

  7. [BZOJ 5323][Jxoi2018]游戏

    传送门 \(\color{green}{solution}\) 它每次感染的人是它的倍数,那么我们只需要找出那些除了自己以外在\(l\), \(r\)内没有别的数是 它的约数的数,在这里称其为关键数. ...

  8. [JXOI2018]游戏

    嘟嘟嘟 九条可怜竟然有这种良心题,似乎稍稍刷新了我对九条可怜的认识. 首先假设我们求出了所有必须要筛出来的数m,那么\(t(p)\)就只受最后一个数的位置影响. 所以我们枚举最后一个数的位置,然后用组 ...

  9. 洛谷P4562 [JXOI2018]游戏 数论

    正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...

随机推荐

  1. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  2. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  3. composer 安装扩展失败的决绝方法

    https://getyii.com/topic/32

  4. 【转】web应用缓慢故障分析

    在这以后里分享一篇关于web应用缓慢的分析过程,感觉挺有用的. 原文出处:http://xjsunjie.blog.51cto.com/999372/751585 友在一家购物网站做运维不久,今日打电 ...

  5. java编程规范-阿里

  6. nlms_step_get

    module nlms_step_get(   rst ,   clk ,   nd ,      din01_i,   din01_q,   din02_i,   din02_q,      dou ...

  7. Cache Algorithms

    1. 平均内存引用时间 T = average memory reference time m = miss ratio = 1 - (hit ratio) Tm = time to make a m ...

  8. 城市边界线预测(根据灯光指数)(PUL)

    1.EXEALL.m function EXEALL(FilePath, FileName)%执行所有流程% FilePath: 文件夹所在路径% FileName: 文件夹名称 FullPath = ...

  9. 股票——成交量加权平均价VWAP

    成交量加权平均价是将多笔交易的价格按各自的成交量加权而算出的平均价,若是计算某一证券在某交易日的VWAP,将当日成交总值除以总成交量即可.VWAP可作为交易定价的一种方法,亦可作为衡量机构投资者或交易 ...

  10. REST格式

    首先要明确一点:REST 实际上只是一种设计风格,它并不是标准.(所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准).aisuhua/restful-api-design-ref ...