bzoj2301 莫比乌斯反演+分段优化
来源:互联网 发布:毛阿敏 知乎 编辑:程序博客网 时间:2024/06/05 04:02
转载请注明出处,谢谢http://blog.csdn.net/bigtiao097?viewmode=contents
题意:
给定整数a,b,c,d,k,求
思路:
这个题比hdu1695 复杂一点,hdu1695可以看一下这里
和hdu1695相比,由于没有了a=c=1这个条件,需要在莫比乌斯反演的基础上容斥一下
莫比乌斯反演:
设
设
这样就有了
然后利用反演公式,因为
根据上述的反演公式直接计算就可以了
关于容斥,假设solve(m,n)代表
则
但是上述这些还不足以AC,会TLE
我们还需要用分段来优化一下枚举因子的倍数的过程
for(int i=1,nex;i<=a;i=nex+1){ nex = min(a/(a/i),b/(b/i)); res += 1LL *(mu[nex]-mu[i-1])*(a/i)*(b/i);}
这里的mu数组是莫比乌斯函数的前缀和
需要注意的是,若n/i=t,则t是满足a*i<=n的a的最大值,则n/(n/i)就是满足商为n/i的i的最大值
上述代码中,
具体代码如下:
Result:Accepted
#include<bits/stdc++.h>typedef long long ll;using namespace std;const int maxn=5e4+5;bool vis[maxn];int prime[maxn];int mu[maxn];int n,a,b,c,d,k,x;ll ans;void mobius(){ memset(vis,0,sizeof vis); mu[1] = 1; int tot = 0; for(int i=2;i<maxn;i++) { if( !vis[i] ) { prime[tot++] = i; mu[i] = -1; } for(int j=0;j<tot;j++) { if(i * prime[j] >=maxn) break; vis[i * prime[j]] = true; if( i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } else mu[i * prime[j]] = -mu[i]; } } for(int i=2;i<maxn;i++) mu[i]+=mu[i-1];}ll solve(int a,int b){ ll res = 0; if(a>b)swap(a,b); for(int i=1,nex;i<=a;i=nex+1) { nex = min(a/(a/i),b/(b/i)); res += 1LL *(mu[nex]-mu[i-1])*(a/i)*(b/i); } return res;}int main(){ mobius(); int T; cin>>T; while(T--) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); a--; c--; n = min(b,d); ans = solve(b/k,d/k)+solve(a/k,c/k)-solve(a/k,d/k)-solve(c/k,b/k); printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- bzoj2301 莫比乌斯反演+分段优化
- bzoj2301 莫比乌斯反演
- 容斥+莫比乌斯反演+分块优化-BZOJ2301
- bzoj2301: [HAOI2011]Problem b 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ2301]Problem b
- BZOJ2301 [HAOI2011]Problem b(莫比乌斯反演)
- 【莫比乌斯反演】【bzoj2301】problem b
- BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演
- 【莫比乌斯反演】[HYSBZ/BZOJ2301]Problem b
- Bzoj2301: [HAOI2011]Problem b:莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- 【BZOJ2301】problem b,数论之莫比乌斯反演
- Bzoj2301 [HAOI2011]Problem b 莫比乌斯反演
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演
- BZOJ2301 容斥原理,莫比乌斯反演
- [BZOJ2301][HAOI2011]Problem b(莫比乌斯反演)
- [bzoj2301]problem b 莫比乌斯反演
- j集训8.15
- 后缀数组
- 关于泰勒展开的细节-《三体》读后感的读后感
- ElasticSearch编程实例—时间范围查询
- Window环境定时执行任务
- bzoj2301 莫比乌斯反演+分段优化
- 编写windbg调试器扩展 高级篇
- ffmpeg记录
- 【转知乎】人工智能会是泡沫吗?
- mapreduce笔记
- 理解linux cpu load
- 17.8.15号
- CSS写太极和魔方动画效果
- 近期杂文集锦-数学方法谈