洛谷P4562 [JXOI2018]游戏
题目
https://www.luogu.com.cn/problem/P4562
沉迷水题无法自拔(感觉校赛要大寄特寄qwq)
思路
可以fa现可怜的检查和员工的通风报信类似一个筛法的过程,当区间中所有的数都被筛到至少一遍时,这个过程就结束了。
然后我们考虑什么情况下区间会被筛完。简单分析一下可知,对于\(a\in [l,r]\),如果\(\exists b\neq a,b\in [l,r]\) 使得 \(b|a\) ,那么\(a\)对筛是没有贡献的,相当于没有筛。
因为\(a\)能筛到的\(b\)都能筛到,而且\(b\)必须筛一遍以保证它本身被筛到。
所以我们可以定义关键数:区间内不存在它的因数。于是\(t(p)=n\)意味着在排列的前n个数中,所有的关键数都出现了(满足n最小)。
所以在找出所有关键数之后,我们可以枚举最后一个关键数出现的位置,写出一个式子(假设一共有\(s\)个关键数,区间长度为\(n=r-l+1\)):
\]
前面是个常量,我们关注和式。
这个东西用生成函数求导的方法当然很套路,但是如果没有学过生成函数也没关系,我们有\(k\tbinom{k-1}{s-1}=s\tbinom{k}{s}\),把\(s\)提出去就是一个平行求和。
不管用什么方式,我们都可以得到\(s\tbinom{n+1}{s+1}\) 这个式子。
所以最终答案就是
\]
尽管算法时间复杂度的瓶颈并不在这里,但是有了封闭形式的结果总是令人愉快的 ⊂(‘ω’⊂ )))
然后我们考虑如何计算这个\(s\)。之前说过所谓的关键数满足:区间内不存在它的因数,这个性质与质数有几分相似,这启发我们,是不是只要对筛法进行一些魔改就能成功呢?
然后我们试着改一下欧拉筛。
然后我们就AC了(雾)。
代码
点击查看代码
#include<cstdio>
#include<cstdlib>
#define maxn (int)(1e7+10)
#define mod ((int)(1e9+7))
#define ll long long
using namespace std;
int l,r,book[maxn],p[maxn],cnt=0;
int f[maxn];
ll fac[maxn];
ll qpow(ll x,int p){
ll ans=1,base=x;
for(;p;p>>=1){
if(p&1) ans=ans*base%mod;
base=base*base%mod;
}
return ans;
}
ll inv(ll x){
return qpow(x,mod-2);
}
ll C(int n,int m){
return fac[n]*inv(fac[m])%mod*inv(fac[n-m])%mod;
}
int main(){
int i,j,n,m,sum=0;
ll ans=0;
scanf("%d%d",&l,&r);
if(l==1){
for(i=1;i<=r;++i) ans=(ans+i)%mod;
for(i=1;i<r;++i) ans=ans*i%mod;
printf("%lld",ans);
return 0;
}
for(i=2;i<=r;++i){
if(!book[i]) p[++cnt]=i;
for(j=1;j<=cnt&&p[j]<=r/i;++j){
book[i*p[j]]=1;
if(!(i%p[j])) break;
}
}
for(i=l;i<=r;++i){
if(!f[i]) sum++;
for(j=1;j<=cnt&&p[j]<=r/i;++j){
f[i*p[j]]=1;
if(!(i%p[j])) break;
}
}
n=r-l+1;
fac[0]=1;
for(i=1;i<=n+1;++i) fac[i]=fac[i-1]*i%mod;
ans=sum*C(n+1,sum+1)%mod;
// for(i=sum;i<=n;++i){
// ans+=i*C(i-1,sum-1);
// }
ans=ans*fac[n-sum]%mod*fac[sum]%mod;
printf("%lld",ans);
// system("pause");
return 0;
}
洛谷P4562 [JXOI2018]游戏的更多相关文章
- 洛谷P4562 [JXOI2018]游戏(组合数学)
题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...
- 洛谷P4562 [JXOI2018]游戏 数论
正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...
- 洛谷 P2197 nim游戏
洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...
- 洛谷 P1965 转圈游戏
洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...
- 洛谷 P1000 超级玛丽游戏
P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...
- 洛谷P1000 超级玛丽游戏(洛谷新手村1-1-1)
题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...
- 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序
洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
随机推荐
- csp201503-2(数字排序)
问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所 ...
- 在docker容器外,使用docker容器中的环境
docker exec -it 334529194f22 /bin/bash -c 'pip install requests-2.22.0-py2.py3-none-any.whl' 其中33452 ...
- Hadoop2.7.3源码编译
一.编译源码步骤演示详解 需求:官网下载的hadoop包,执行hadoop命令时,会有警告信息,为去除此警告,需要重新编译hadoop相应版本的源码,替换hadoop安装包lib目录下的native( ...
- EF中使用SqlBulkCopy
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using S ...
- pg9.6进程架构
进程架构 1.1 进程父子关系 PostgreSQL 的进程架构由多个后端进程组成,其父进程是 postmaster.进程 ID 记录在 {PGDATA}/postmaster.pid 文件中.当实例 ...
- win10上打包的qt程序放到win7上打不开的解决方法
在win 10 上编写并打包发布了qt5.12.3 msvc2017 32bit的qt程序,在其他win10 电脑上都能正常运行,但是放到win7电脑上,运行exe时依次出现缺少"msvcp ...
- T137223 节能主义
设平均数为$x$,那么有差值数组$b_i=a_i-x$. 考虑用类似于均分纸牌的方法来解决本题,从左到右依次考虑每堆书,直接乘上预处理好的组合数,然后清零$b_i$. 在实际操作中,将冗余的操作忽略, ...
- drools规则的入门使用
1:pom文件 <!--drools--><dependency> <groupId>org.drools</groupId> <artifact ...
- docker-swarm轻量集群
使用docker swarm搭建docker轻量集群服务 当前流行的k8s集群搭建无疑是很好的docker集群管理服务,但是对于像我这种仅自己学习的玩家有些过于重量,所以今天使用docker自带的do ...
- 微信支付模式二java
这个星期写了下微信支付模式二,在这里进行下整理 微信支付官方文档 1. 需要的配置..具体看下面的链接. https://pay.weixin.qq.com/wiki/doc/api/native.p ...