洛谷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炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
随机推荐
- Mybatis的几种传参方式
前言 单个参数 多个参数 使用索引[不推荐] 使用@Param 使用Map POJO[推荐] List传参 数组传参 总结 单个参数 单个参数的传参比较简单,可以是任意形式的,比如#{a}.#{b}或 ...
- PV动态供给之nfs
需求描述:利用nfs实现PV动态供给 前提:部署好nfs服务器 这里地址是 192.168.1.35 path: /ifs/k8s NFS:是一个主流的文件共享服务器. # yum install ...
- CSS实现开门效果
.door{ position: relative; width: 450px; height: 300px; border: 1px solid #000; margin: 100px auto; ...
- C# 通过程序执行svn更新或提交更改
实现方法: private static void RunBat(string program, string parm) { try { Process proc = new Process(); ...
- openGL 学习笔记 (一) 了解 OpenGL,创建第一个OpenGL窗口
// 序章最开始我以为OpenGL是一系列的API,他给出了一系列对计算机图像的操作接口.但其实OpenGL其实并不是一个API,他是由khronos组织制定并维护的规范. 早期的OpenGL使用立即 ...
- 亲测:一个完整Vue开发环境搭建。
参考博客飞机: https://www.cnblogs.com/zhaomeizi/p/8483597.html
- 开启Runjar , 使用beeline连接hive
要先开启hadoop服务 进入root用户hive目录 输入bin/hiveservices.sh stop 停止 输入bin/hiveservices.sh start ...
- ES6-moudle
一.基础认知 结合案例体验module: 前面模拟模块是用立即执行的匿名函数,需要把某些通过window暴露出去,所以还是不能消除全局变量 module模块系统需要服务器环境才能正常执行,在html文 ...
- 记录web面经
1. npm版本号含义 例如: 2.3.1 (分别表示: 大版本,小版本, 补丁版本)大版本号: 大版本更新,功能添加,向下不兼容.小版本号:功能新增,向下兼容.补丁版本号: 修复bug.~符号含义: ...
- 如何用python脚本采集某网图片
一.前言: 今天学了两个工具urlopen 和etree,这两个小工具至关重要.urllib.request模块提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还 ...