UVa1531 - Problem Bee

简介: UVa1531 - Problem Bee
#include <cstdio>#include <cmath>#include <algorithm>usingnamespacestd;
constdoubleEPS=1e-6;
constdoubleSQRT3=sqrt((double)3);
constintdir[7][2] = {{0, 0}, {-1, 1}, {0, 2}, {1, 1}, {1, -1}, {0, -2}, {-1, -1}};
structPoint{
doublex, y;
};
doubler, xa, ya, xb, yb;
doublestepx, stepy;
boolinput();
PointfindFirstSection(doublex, doubley);
Pointfind(doublex, doubley);
voidsolve();
intmain()
{
#ifndef ONLINE_JUDGEfreopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endifwhile (input()) {
solve();
    }
return0;
}
boolinput()
{
if (scanf("%lf%lf%lf%lf%lf", &r, &xa, &ya, &xb, &yb) !=5||!(r||xa||ya||xb||yb)) returnfalse;
stepx=1.5*r;
stepy=SQRT3/2*r;
returntrue;
}
PointfindFirstSection(doublex, doubley)
{
intdx= (int)(x/stepx);
intdy= (int)(y/stepy);
if (dx&1) {
if (!(dy&1)) dy++;
    } else {
if (dy&1) dx++;
    }
doubleMin=0x3f3f3f3f;
Pointans;
for (inti=0; i<7; i++) {
doubletmpx=stepx* (dx+dir[i][0]);
doubletmpy=stepy* (dy+dir[i][1]);
doubletmp=sqrt(pow(tmpx-x, 2) +pow(tmpy-y, 2));
if (tmp<Min) {
ans.x=tmpx;
ans.y=tmpy;
Min=tmp;
        }
    }
returnans;
}
Pointfind(doublex, doubley)
{
Pointans;
if (x>0&&y>0) {
ans=findFirstSection(x, y);
    } elseif (x<0&&y>0) {
ans=findFirstSection(-x, y);
ans.x=-ans.x;
    } elseif (x<0&&y<0) {
ans=findFirstSection(-x, -y);
ans.x=-ans.x;
ans.y=-ans.y;
    } else {
ans=findFirstSection(x, -y);
ans.y=-ans.y;
    }
returnans;
}
voidsolve()
{
Pointa=find(xa, ya);
Pointb=find(xb, yb);
doubledis;
if (fabs(a.x-b.x) <EPS&&fabs(a.y-b.y) <EPS) {
dis=sqrt(pow(xa-xb, 2) +pow(ya-yb, 2));
printf("%.3lf\n", dis);
return;
    }
intx1= (int)(fabs(a.x-b.x) /stepx+0.5);
intx2= (int)(fabs(a.y-b.y) /stepy+0.5);
intd;
if (x1>=x2) {
d=x1;
     } else {
d=x1+ (x2-x1) /2;
     }
dis=sqrt(pow(a.x-xa, 2) +pow(a.y-ya, 2)) +sqrt(pow(b.x-xb, 2) +pow(b.y-yb, 2)) +d*SQRT3*r;
printf("%.3lf\n", dis);
}
目录
相关文章
Cesium开发:模型实体高亮
Cesium开发:模型实体高亮
974 0
yum install、localinstall和groupinstall区别
yum install、localinstall和groupinstall区别
723 0
|
8月前
|
安全 API 开发者
深入探索ArkUI中的@LocalBuilder装饰器:构建高效可维护的UI组件
在ArkUI框架中,组件化开发至关重要。@LocalBuilder作为自API version 12引入的装饰器,专注于组件内部私有构建,确保封装性与安全性。本文解析其工作原理、参数传递机制及与@Builder的区别,结合典型场景代码示例,助开发者掌握这一工具。通过状态驱动UI更新、复杂组件组合等实践,优化性能并提升代码可维护性,推动高效UI架构构建。
233 0
|
12月前
|
前端开发 JavaScript
React Hooks 深入解析
React Hooks 深入解析
155 0
|
存储 缓存 前端开发
【数据结构/C语言】深入理解 双向链表
【数据结构/C语言】深入理解 双向链表
|
存储 Java
【编程基础知识】《Java 起航指南:配置 Java 环境变量的秘籍与奥秘》
本文详细介绍了如何配置 Java 环境变量及其重要性,通过具体步骤、代码示例和流程图,帮助初学者轻松掌握 Java 环境变量的设置,为 Java 编程打下坚实基础。关键词:Java、环境变量、配置方法、编程基础。
580 57
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
653 3
|
运维 Kubernetes 数据处理
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
Kubernetes已经成为事实的云原生操作系统,成为业务上云、容器化的标准。从过去无状态应用、企业核心应用,到现在AI时代的数据处理、AI训练、科学仿真等,越来越多的离线任务跑在K8s上。
|
Shell Go 开发工具
使用 Hugo 快速搭建一个云博客系统
使用Hugo快速搭建博客,Hugo是基于Go的静态站点生成器,以其简单、高效著称。[官网](https://gohugo.io/) 提供多种主题,如[m10c](https://themes.gohugo.io/themes/hugo-theme-m10c/)等。在Mac上可通过`brew install hugo`安装。创建站点`hugo new site ~/hugo-blog`,
341 0
使用 Hugo 快速搭建一个云博客系统
|
消息中间件 中间件
中间件消息队列的优势流量削峰
【6月更文挑战第7天】
247 3