BZOJ 2301 Problem b
2301: [HAOI2011]Problem b
Time Limit: 50 Sec Memory Limit: 256 MB
Submit: 7576 Solved: 3643
[Submit][Status][Discuss]
Description
Input
第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k
Output
共n行,每行一个整数表示满足要求的数对(x,y)的个数
Sample Input
2 5 1 5 1
1 5 1 5 2
Sample Output
3
HINT
100%的数据满足:1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数
思路:在hdu1695的基础上加上容斥,即:ans=solve(b/k,d/k)-solve((a-1)/k,d/k)-solve((c-1)/k,b/k)+solve((a-1)/k,(c-1)/k),详见代码:
具体见代码:
1 /************************************************************** 2 Problem: 2301 3 User: SongHL 4 Language: C++ 5 Result: Accepted 6 Time:10768 ms 7 Memory:2072 kb 8 ****************************************************************/ 9 10 #include<bits/stdc++.h> 11 using namespace std; 12 typedef long long ll; 13 const int sigma_size=26; 14 const int N=100+50; 15 const int MAXN=50000+50; 16 17 int primecnt; 18 int vis[MAXN],mu[MAXN],prime[MAXN],sum[MAXN]; 19 void Mobius() 20 { 21 primecnt=0; mu[1]=1; 22 memset(vis,0,sizeof(vis)); 23 for(int i=2;i<MAXN;i++) 24 { 25 if(!vis[i]) prime[primecnt++]=i,mu[i]=-1; 26 for(int j=0;j<primecnt && i*prime[j]<MAXN;j++) 27 { 28 vis[i*prime[j]]=1; 29 if(i%prime[j]) mu[i*prime[j]]=-mu[i]; 30 else { mu[i*prime[j]]=0; break; } 31 } 32 } 33 } 34 ll solve(int l,int r) 35 { 36 ll ans=0; 37 if(l>r) swap(l,r); 38 int last; 39 for(int i=1;i<=l;i=last+1) 40 { 41 last=min(l/(l/i),r/(r/i)); 42 ans+=(ll)(sum[last]-sum[i-1])*(l/i)*(r/i); 43 } 44 return ans; 45 } 46 int main() 47 { 48 Mobius(); 49 sum[0]=0; 50 for(int i=1;i<MAXN;i++) sum[i]=sum[i-1]+mu[i]; 51 int T; 52 scanf("%d",&T); 53 while(T--) 54 { 55 int a,b,c,d,k; 56 scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); 57 ll ans=solve(b/k,d/k)-solve((a-1)/k,d/k)-solve((c-1)/k,b/k)+solve((a-1)/k,(c-1)/k); 58 printf("%lld\n",ans); 59 } 60 return 0; 61 }
View Code
转载于:https://www.cnblogs.com/songorz/p/9787882.html
BZOJ 2301 Problem b相关推荐
- BZOJ 2301 - Problem b(莫比乌斯反演+容斥)
题目链接 https://cn.vjudge.net/problem/HYSBZ-2301 [题意] 对于给出的 n 个询问,每次求有多少个数对(x,y)(x,y) ,满足 a≤x≤b,c≤y≤da≤ ...
- BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37166 题意:对于给出的n个询问,每次求有多少个数对(x,y),满 ...
- BZOJ 2301: [HAOI2011]Problem b
二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...
- HDU 1695 BZOJ 2301 莫比乌斯反演
看了两个多小时,大概意思我觉得莫比乌斯是一个利用一个数的能被整除的一些数,通过容斥来计算出这个数的一些信息,很高级.这个题就当做是模板吧.然后把两种形式贴出来: 第一种: 第二种: 然后是容斥的函数: ...
- BZOJ 2301 [HAOI2011]Problem b
2301: [HAOI2011]Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函 ...
- 莫比乌斯反演(bzoj 2301: [HAOI2011]Problem b)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 5322 Solved: 2459 [Submi ...
- 【BZOJ 2301】[HAOI2011]Problem b
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- bzoj 2298 problem a
Written with StackEdit. Description 一次考试共有\(n\)个人参加,第\(i\)个人说:"有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低.& ...
- bzoj 2301(Mobius)
推出式子然后分块求和(还需使用一下容斥原理). 分析:令f(n,m,i)表示在1<=x<=n,1<=y<=m,满足gcd(x,y)是i的(x,y)的对数. ans=f(c,d, ...
最新文章
- 【转】教你在PHP中使用全局变量
- Python学习之GUI--SQL数据库连接
- Latex:表格制作全攻略
- android edittext禁止输入特殊字符,Android EditText禁止输入空格和特殊字符
- tensorflow3 非线性回归、mnist、简单神经网络
- postman替换快捷键ctrl加什么_电脑截图快捷键ctrl加什么
- 新版本ISR 为啥 移除replica.lag.max.messages这个参数
- 股票历史数据下载接口踩坑记录
- Docker学习篇(一)Docker概述、安装和常用命令
- C语言储蓄系统编程,C语言:银行储蓄系统的开发(初级)-Go语言中文社区
- 关于用C#编写ActiveX控件4(转)
- 计算机408考研笔记汇总
- Android 签名类型
- 南京邮电大学电子电路课程设计可编程音乐自动演奏电路
- KDD2020|字节联合密歇根州立大学提出推荐广告联合训练框架RAM(已开源)
- erp是企业内部最重要的使用程序,它对日常运作至关重要
- java连接达梦数据库_【达梦数据库】Activiti连接达梦数据库
- nc6400 在bios中打开SATA模式就会蓝屏呢
- 完全二叉树的节点个数
- 为何用户体验无法被设计,如何为用户体验设计
热门文章
- java 值和引用_Java值传递还是引用传递?
- mysql .myi权限_mysql之引擎、Explain、权限详解
- OpenCV读图、展示和保存新图
- 红帽linux桌面版镜像下载,红帽 Red Hat Linux相关产品iso镜像下载【迅雷快传】【更新5.11 6.6】...
- 掌握了AI这些点,面试官的天选之子就是你
- VGG16迁移学习,实现医学图像识别分类工程项目
- linux多环境变量使用字典,字典的用处非常大,昨天在网上找了个能在linux跑的字典程序,分享一下。...
- 计算机可视化仿真技术opengl,基于OpenGL的三维场景可视化仿真
- 京东动态页面爬虫 scrapy+selenium
- 一汽奔腾b7o价位_全新奔腾B70正式上市,前脸被吐槽酷似某豪华品牌