【jxoi2018】游戏 组合数学
首先令$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】游戏 组合数学的更多相关文章
- luogu P4562 [JXOI2018]游戏 组合数学
LINK:游戏 当L==1的时候 容易想到 答案和1的位置有关. 枚举1的位置 那么剩下的方案为(R-1)! 那么总答案为 (R+1)*R/2(R-1)! 考虑L==2的时候 对于一个排列什么时候会终 ...
- 洛谷P4562 [JXOI2018]游戏(组合数学)
题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...
- 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)
[BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...
- [JXOI2018]游戏 (线性筛,数论)
[JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...
- 【题解】JXOI2018游戏(组合数)
[题解]JXOI2018游戏(组合数) 题目大意 对于\([l,r]\)中的数,你有一种操作,就是删除一个数及其所有倍数.问你删除所有数的所有方案的步数之和. 由于这里是简化题意,有一个东西没有提到: ...
- BZOJ5323 JXOI2018游戏(线性筛+组合数学)
可以发现这个过程非常类似埃氏筛,将在该区间内没有约数的数定义为质数,那么也就是求每种方案中选完所有质数的最早时间之和. 于是先求出上述定义中的质数个数,线性筛即可.然后对每个最短时间求方案数,非常显然 ...
- [BZOJ 5323][Jxoi2018]游戏
传送门 \(\color{green}{solution}\) 它每次感染的人是它的倍数,那么我们只需要找出那些除了自己以外在\(l\), \(r\)内没有别的数是 它的约数的数,在这里称其为关键数. ...
- [JXOI2018]游戏
嘟嘟嘟 九条可怜竟然有这种良心题,似乎稍稍刷新了我对九条可怜的认识. 首先假设我们求出了所有必须要筛出来的数m,那么\(t(p)\)就只受最后一个数的位置影响. 所以我们枚举最后一个数的位置,然后用组 ...
- 洛谷P4562 [JXOI2018]游戏 数论
正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...
随机推荐
- 使用RSA进行信息加密解密的WebService示例
使用RSA进行信息加密解密的WebService示例 按:以下文字涉及RSA对WebService传递的数据的加密解密,如果您已经熟知RSA或是有其它更好的方法请不要往下看以免浪费时间. WebSer ...
- 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)
传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...
- 2018.08.30 Tyvj1952 Easy(期望dp)
Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连 ...
- tp5月统计的bug
月统计求和时 本月第一天没有统计到
- 03-vue-router
前端路由的实现原理 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- UVa 10340 All in All (水题,匹配)
题意:给定两个字符串,问第一个串能不能从第二个串通过删除0个或多个字符得到. 析:那就一个字符一个字符的匹配,如果匹配上了就往后走,判断最后是不是等于长度即可. 代码如下: #include < ...
- 20170908工作日记--UML画类图、HTTP协议、Volley源码走读
随手搜了一下,Android studio居然能够自动帮追我们生成UML的类图,简直太棒了http://www.gcssloop.com/course/UsePlantUMLInAS(Win),具体做 ...
- android中Actionbar详解
1.什么是Action BarAction Bar被认为是新版Android系统中最重要的交互元素,在程序运行中一直置于顶部,主要起到的作用在于:1)突出显示一些重要操作(如“最新”.“搜索”等)2) ...
- Spark RDD详解
1.RDD是什么 RDD(Resilient Distributed Dataset):是Spark的核心数据结构,指的是一个只读的.可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多 ...
- [CentOS]Centos设置PATH全局变量
PATH确认方法 $ echo $PATH 根据优先级先后顺序用:分割,因此可以复数指定 PATH设定方法(临时) $ export PATH=$PATH:/usr/local/scala/bin P ...