【BZOJ】【2301】problem b
2024-08-26 19:50:26
莫比乌斯反演/容斥原理
Orz PoPoQQQ
PoPoQQQ莫比乌斯函数讲义第一题。
for(i=1;i<=n;i=last+1){
last=min(n/(n/i),m/(m/i));
……
}
这种写法可以O(sqrt(n))枚举所有的n/d,这个枚举除法的取值在莫比乌斯反演中非常常用。
/**************************************************************
Problem: 2301
User: Tunix
Language: C++
Result: Accepted
Time:10964 ms
Memory:2932 kb
****************************************************************/ //BZOJ 2301
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*=sign;
}
/*******************tamplate********************/
const int N=;
typedef long long LL;
int prime[N],mu[N];
bool check[N];
LL sum[N]; void getmu(int n){
memset(check,,sizeof check);
mu[]=;
int tot=;
F(i,,n){
if(!check[i]){
prime[tot++]=i;
mu[i]=-;
}
rep(j,tot){
if(i*prime[j]>n)break;
check[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
else mu[i*prime[j]]=-mu[i];
}
}
F(i,,n) sum[i]=sum[i-]+mu[i];
}
LL calc(int m,int n,int k){
int i,last;
LL re=;
n/=k; m/=k;
for(i=;i<=m && i<=n;i=last+){
last=min(n/(n/i),m/(m/i));
re+=(sum[last]-sum[i-])*(m/i)*(n/i);
}
return re;
}
int main(){
getmu(N);
int T=getint();
while(T--){
int a=getint(), b=getint(), c=getint(), d=getint(), k=getint();
printf("%lld\n", calc(b,d,k)-calc(a-,d,k)-calc(b,c-,k)+calc(a-,c-,k));
}
return ;
}
2301: [HAOI2011]Problem b
Time Limit: 50 Sec Memory Limit: 256 MB
Submit: 1883 Solved: 808
[Submit][Status][Discuss]
Description
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
Input
第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k
Output
共n行,每行一个整数表示满足要求的数对(x,y)的个数
Sample Input
2
2 5 1 5 1
1 5 1 5 2
Sample Output
14
3
3
HINT
100%的数据满足:1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
Source
最新文章
- 总结-javascript-ajax
- 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_
- php中的include()的使用技巧
- 利用Android手机里的摄像头进行拍照
- .NET之美——C# 中的委托和事件
- [置顶] 栈/入栈/出栈顺序(c语言)-linux
- ActiveMQ可靠性机制
- iOS 应用开发中的断点续传实践总结
- TreeView 数据绑定及选中命令处理
- ubuntu学习: apt-get命令
- Iterm2安装Zsh + Oh My Zsh+Solarized
- Reading task(Introduction to Algorithms. 2nd)
- mysql服务器主从数据库同步配置
- Fiddler抓包请求前设置断点
- js 上下滚动加停顿效果,js 跑马灯加停顿效果
- TYVJ1266 费解的开关
- 【php】下载站系统Simple Down v5.5.1 xss跨站漏洞分析
- AGC027 E - ABBreviate
- AForge.NET简介
- keras LSTM中间的dropout
热门文章
- 转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789
- 基于HTML5 的人脸识别活体认证
- 【转】在delphi中实现控件的拖拽
- delphi的几个特别关键字 object absolute
- Ztack学习笔记(6)-广播组播点播
- jQuery toggle方法的一个奇怪表现。
- [笔记]--Ubuntu安装Sublime Text 2
- JavaWeb之 Servlet执行过程 与 生命周期
- Java Collections Source Code Series 1 --- 简介
- 九度oj 1184 二叉树遍历