博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】3834: [Poi2014]Solar Panels
阅读量:6470 次
发布时间:2019-06-23

本文共 1076 字,大约阅读时间需要 3 分钟。

题意:求$max\{(i,j)\}, smin<=i<=smax, wmin<=i<=wmax$,其中$smin<=smax<=10^9, wmin<=wmax<=10^9$,有$N<=1000$组数据

#include 
using namespace std;int main() { int cs, smin, smax, wmin, wmax, ans; scanf("%d", &cs); while(cs--) { scanf("%d%d%d%d", &smin, &smax, &wmin, &wmax); if(smax>wmax) swap(smin, wmin), swap(smax, wmax); ans=1; if(wmin<=smax && smax<=wmax) ans=smax; else { --smin; --wmin; for(int d=smax, pos; d; d=pos) { pos=max(smax/(smax/d+1), wmax/(wmax/d+1)); if(smin>=d) pos=max(pos, smin/(smin/d+1)); if(wmin>=d) pos=max(pos, wmin/(wmin/d+1)); if(smax/d-smin/d>0 && wmax/d-wmin/d>0) { ans=d; break; } } } printf("%d\n", ans); } return 0;}

  

假设$smax<=wmax$

如果$wmin<=smax<=wmax$,显然答案就是$smax$

考虑枚举$d=gcd$,那么转换为在区间$[ \lfloor \frac{smin}{d} \rfloor, \lfloor \frac{smax}{d} \rfloor ] 和 [ \lfloor \frac{wmin}{d} \rfloor, \lfloor \frac{wmax}{d} \rfloor ]$找$[(i, j)]=1$表示存在$gcd(i,j)=d$

于是我就很sb了............我为什么一定要$[(i,j)]=1$呢.............然后膜拜了zyf千古神犇....发现其实$[(i,j)]>=1$就行了= =.............因为我很sb没想到.......倍数关系啊= =

于是分块查询即可..

复杂度$O(N4\sqrt{smax})$

转载地址:http://tgdko.baihongyu.com/

你可能感兴趣的文章
Linux中的ls命令详细使用
查看>>
graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
查看>>
graph-tool 练习
查看>>
easyui treegrid逐步加载
查看>>
GraphicsLab Project之辉光(Glare,Glow)效果 【转】
查看>>
<转>Python: __init__.py 用法
查看>>
Linux Curl命令
查看>>
046 SparlSQL中的函数
查看>>
Zookeeper 的 Lua 绑定(二)
查看>>
-27979 LoadRunner 错误27979 找不到请求表单 Action.c(73): Error -27979: Requested form not found...
查看>>
[LeetCode] Minimum Depth of Binary Tree
查看>>
,net运行框架
查看>>
Java 中 Emoji 的正则表达式
查看>>
Mixin Network第一届开发者大赛作品介绍- dodice, diceos和Fox.one luckycoin
查看>>
安卓Glide(4.7.1)使用笔记 01 - 引入项目
查看>>
AndroidNote
查看>>
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
Flex布局
查看>>
Material Design之 AppbarLayout 开发实践总结
查看>>
Android中的SurfaceView详解
查看>>