HDU 4643 GSM
来源:互联网 发布:运营数据分析专员 编辑:程序博客网 时间:2024/06/05 19:40
题意:有m个基站,手机只会接收距离最近的基站的信号,然后有k个询问,每次给你两个点a,b,问从a到b会更换几次基站
find(p):返回离p点最近的基站的下标
如果find(p1)==find(p2),则从p1到p2不会更换基站
如果p1,p2距离很小,则从p1到p2只会更换一次基站
否则二分求解
#include <cstdio>#include <cmath>const double eps = 1e-9;struct P{ double x, y; P(){} P(double _x, double _y){x = _x; y = _y;}};double dis2(P a, P b) {return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);}int n, m;P city[55], base[55];int find(P a){ int k = 1; double d = dis2(a, base[1]); for(int i = 2; i <= m; i++) { double nd = dis2(a, base[i]); if(d > nd) k = i, d = nd; } return k;}int get_times(P l, P r){ int k1 = find(l), k2 = find(r); if(k1 == k2) return 0; if(dis2(l, r) < eps) return 1; P mid((l.x + r.x)/2, (l.y + r.y)/2); return get_times(l, mid) + get_times(mid, r);}int main(){ while(~scanf("%d%d", &n, &m)) { for(int i = 1; i <= n; i++) scanf("%lf%lf", &city[i].x, &city[i].y); for(int i = 1; i <= m; i++) scanf("%lf%lf", &base[i].x, &base[i].y); int q, a, b; scanf("%d", &q); while(q--) { scanf("%d%d", &a, &b); printf("%d\n", get_times(city[a], city[b])); } } return 0;}
0 0
- HDU 4643 GSM
- hdu 4643GSM
- HDU-4643-GSM(DFS)
- HDU 4643 GSM
- hdu 4643 GSM(几何)
- HDU 4643 GSM(计算几何)
- hdu 4643 GSM 计算几何 - 点线关系
- HDU 4643 GSM 简单计算几何 (2013多校联合)
- HDU 4643 GSM(计算几何求线段的中垂线)
- GSM
- GSM
- GSM
- GSM
- GSM
- GSM
- GSM
- GSM
- GSM
- CentOS源码编译安装Haproxy
- android dalvik heap 浅析
- editText 滚动事件和长按事件冲突
- java常用的7大排序算法汇总(个人收藏)
- laravel5 路由配置 技巧
- HDU 4643 GSM
- UITextField文本输入框
- React Native 中Image 加本地图片的方法
- VS2005(excel2007)利用Automation(OLD Automation)方法。将Excel当成组件服务器的编译错误 我的系统盘和office都装在d盘。 自动生成的import有问题
- 自定义loading布局背景
- PHP array_splice()与array_slice()函数
- suse LInux 网络ip设置
- report代码分析1--AdjacencyGraphvizReport
- Rational Rose Enterprise Edition2003 版本,64位也可以安装成功