bzoj 3930: [CQOI2015]选数【递推】
妙啊
这个题一上来就想的是莫比乌斯反演:
\]
但是看到r的范围发现前缀和不能处理于是不能分块于是时间复杂度为\( O(rlog_2n) \)于是GG。(其实是可以处理的但是我不会比较麻烦,而且复杂度高所以没写,方法详见PoPoQQQ大爷blog http://blog.csdn.net/popoqqq/article/details/44917831)
这时注意到r-l的范围看起来很可做,所以考虑复杂度与len有关的算法。
这里有一个性质,当a集合不全部相等时\( gcd(a_1,a_2...,a_n)=k,k\leq a_{max}-a_{min} \)。
证明:设\( {b_1,b_2...,b_n}={\frac {a_1} {k},\frac {a_2} {k},...,\frac {a_n} {k},} \),因为不全部相等,所以\( b_{max}-b_{min} \geq 1 \),所以\( (b_{max}-b_{min})*k=a_{max}-a_{min}\geq k \)
首先,\( l=(l-1)/k,r=r/k \)把问题转换为在新的\( (l,r) \)范围内求\( gcd==1 \) 的方案数(注意以下的l和r都是新的范围);
设\( f[i] \)为gcd为i时的方案数,可以求出gcd为i的倍数是的方案数\( sum=(\left \lceil r/i \right \rceil-\left \lceil l/i \right \rceil)^n-(\left \lceil r/i \right \rceil-\left \lceil l/i \right \rceil) \),减去的是集合内数字全部相等的方案个数。那么\( f[i]=sum - \sum_{i|j}^{j\leq len} f[j] \)。可以选择从后往前递推。
时间复杂度...理论上是\( O(lenlog_2len) \)或者 \( O(lenlog_2n) \),但是调和级数和快速幂的复杂度我不知道怎么加(躺
#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005,mod=1e9+7;
int n,k,l,r,len,p,f[N];
int ksm(int a,int b)
{
int r=1;
while(b)
{
if(b&1)
r=(long long)r*a%mod;
a=(long long)a*a%mod;
b>>=1;
}
return r;
}
int main()
{
scanf("%d%d%d%d",&n,&k,&l,&r);
if(l<=k&&r>=k)
p=1;
l=(l-1)/k,r=r/k,len=r-l;
for(int i=len;i>=1;i--)
{
int x=l/i,y=r/i;
f[i]=(ksm(y-x,n)-y+x+mod)%mod;//减去的是区间全部相等
for(int j=i*2;j<=len;j+=i)
f[i]=((f[i]-f[j])%mod+mod)%mod;
}
printf("%d\n",f[1]+p);
return 0;
}
bzoj 3930: [CQOI2015]选数【递推】的更多相关文章
- BZOJ 3930: [CQOI2015]选数 递推
3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...
- 3930: [CQOI2015]选数|递推|数论
题目让求从区间[L,H]中可反复的选出n个数使其gcd=k的方案数 转化一下也就是从区间[⌈Lk⌉,⌊Hk⌋]中可反复的选出n个数使其gcd=1的方案数 然后f[i]表示gcd=i的方案数.考虑去掉全 ...
- 【递推】BZOJ 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- 【刷题】BZOJ 3930 [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- bzoj 3930: [CQOI2015]选数
Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...
- bzoj 3930: [CQOI2015]选数【快速幂+容斥】
参考:https://www.cnblogs.com/iwtwiioi/p/4986316.html 注意区间长度为1e5级别. 则假设n个数不全相同,那么他们的gcd小于最大数-最小数,证明:则gc ...
- BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$ $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...
- 【BZOJ】3930: [CQOI2015]选数
题意 从区间\([L, R]\)选\(N\)个数(可以重复),问这\(N\)个数的最大公约数是\(K\)的方案数.(\(1 \le N, K \le 10^9, 1 \le L \le R \le 1 ...
随机推荐
- Apache 文件根目录设置修改方法 (Document Root)
最近在学习WordPress,使用appServ 在windows上搭建Php开发环境 在网上查找到的关于修改Apache服务器根目录的资料,对比学习,再此记录 在安装 Apache 时,系统会给定一 ...
- HDU 6390
GuGuFishtion Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- Permutations(排列问题,DFS回溯)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- Java实现简单的图片浏览器
第一次写博客,不喜勿喷. 最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下. 学校的教程是用Swing来做界面的,所以这里也用这个来讲. 首先要做个大概的界面出 ...
- Semaphore使用
Semaphore使用
- VMware虚拟机上安装linux和克隆
虚拟机上安装好一台linux 系统后.为了高速搭建hadoop集群.须要再安装几个linux系统,比較笨的办法能够又一次用ios 镜像文件进行安装.可是又一次安装须要又一次配置一些信息并且安装时间比較 ...
- payload和formData有什么不同?
最近做项目的时候,在通过post请求向服务端发送数据的时候,请求失败了.错误信息如下: 返回的400(bad request)错误,说明客户端这边发送的请求是有问题的. 和通过jquery中的ajax ...
- 重载OverLoad。隐藏new
<1> using System; using System.Collections.Generic; using System.Linq; using System.Text; name ...
- webstorm 6.0 注册码
User Name: EMBRACE License Key: ===== LICENSE BEGIN ===== 24718-12042010 00001h6wzKLpfo3gmjJ8xoTPw ...
- PHP使用debug_backtrace方法跟踪代码调用
在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改.如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调 ...