题目:如图所看到的的蜂巢型的图中。蜜蜂想从A点飞到B点,假设A与B不在同一个正六边形中,

则它先飞到A的中心。每次飞到相邻格子的中心,最后飞到B的中心,再飞到B点;

假设在一个格子中。直接飞过去就可以(观察第二组数据)。

分析:计算几何。

设格子边长为a。

首先观察,全部格子的中心为(3xa/2,sqrt(3)ya/2),当中x、y为整数且奇偶性同样;

因此。依据给定点的坐标,能够求出A,B所在的格子的行列编号(处理奇偶性不同情况)。

(因为,是取整计算,所以要要推断周围六个格子。是不是比自己更适合);

然后计算就可以。当中:(观察能够发现仅仅有数值和斜着走两种方式)

设x为横坐标编号差。y为纵坐标编号差;

假设。x >= y 则每次斜着走一定走到。所以中间路径长度为sqrt(3)*a*x。

否则,x < y 则多余的y要竖直方形行走。中间路径长度为sqrt(3)*a*((y-x)/ 2+r);

说明:注意编号奇偶同一时候的处理。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>using namespace std;typedef struct pnode
{double x,y;
}point;
point a,b;typedef struct snode
{int r,l;
}place;
place p,q;point getpoint(int r, int l, double L)
{point p;p.x = r*1.5*L;p.y = l*sqrt(3.0)/2.0*L;return p;
}double dist(point p, point q)
{return sqrt((p.x-q.x)*(p.x-q.x)+(p.y-q.y)*(p.y-q.y));
}int dxy[7][2] = {{0,0},{0,2},{-1,1},{1,1},{-1,-1},{1,-1},{0,-2}};
place getplace(point a, double L)
{int r = (int)(2*a.x/L/3.0);int l = (int)(2*a.y/L/sqrt(3.0));if (r%2 != l%2) {l = l+l%2;r = r+r%2;}int now = 0;for (int i = 1 ; i < 7 ; ++ i)if (dist(a, getpoint(r+dxy[i][0], l+dxy[i][1], L))< dist(a, getpoint(r+dxy[now][0], l+dxy[now][1], L)))now = i;place s;s.r = r+dxy[now][0];s.l = l+dxy[now][1];return s;
}int main()
{double L,path,d1,d2;while (~scanf("%lf%lf%lf%lf%lf",&L,&a.x,&a.y,&b.x,&b.y) && L) {p = getplace(a, L);q = getplace(b, L);d1 = dist(a, getpoint(p.r, p.l, L));d2 = dist(b, getpoint(q.r, q.l, L));int r = abs(p.r-q.r),l = abs(p.l-q.l);if (r >= l)path = r*L*sqrt(3.0);else path = ((l-r)/2+r)*L*sqrt(3.0);if (r+l) printf("%.3lf\n",path+d1+d2);else printf("%.3lf\n",path+dist(a,b));}return 0;
}

UVa 1531 - Problem Bee相关推荐

  1. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版

    学到两个: //ignore \n cin.ignore(); //ignore a line cin.ignore(1024, '\n'); #include<cstdio> #incl ...

  2. UVA 12235 Help Bubu

    状态压缩DP 题意: 书架上有n本书,给出一个书的高度的序列,我们把相邻的高度相同的书看成一个片段,并且定义该书架的混乱程度为片段的个数.为整理书架,你最多可以从中拿出k本书,然后再把他们插回书架(其 ...

  3. UVa 1471 Defense Lines - 线段树 - 离散化

    题意是说给一个序列,删掉其中一段连续的子序列(貌似可以为空),使得新的序列中最长的连续递增子序列最长. 网上似乎最多的做法是二分查找优化,然而不会,只会值域线段树和离散化... 先预处理出所有的点所能 ...

  4. UVa 12627 Erratic Expansion - 分治

    因为不好复制题目,就出给出链接吧: Vjudge传送门[here] UVa传送门[here] 请仔细看原题上的那幅图,你会发现,在时间t(t > 0),当前的气球构成的一幅图,它是由三个时间为( ...

  5. Spreading the Wealth( UVA - 11300)

    题目链接: Spreading the Wealth UVA - 11300 Problem A Communist regime is trying to redistribute wealth i ...

  6. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  7. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  8. 红书《题目与解读》第一章 数学 题解《ACM国际大学生程序设计竞赛题目与解读》

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 红书<题目与解读>第一章 数学 题解<ACM国际大学生程序设计竞赛题目与解读> ...

  9. java防止用户越权访问文件_针对功能权限(url访问)如何避免越权访问

    uva 11324 Problem B: The Largest Clique Given a directed graph G, consider the following transformat ...

最新文章

  1. 中科院微生物所高程组招聘助研3名(正式编制)
  2. scala_until
  3. [转]关于HTTP服务器每个客户端2个连接的限制
  4. linux kernel 下的hash 和链表 应用
  5. Linux 文件与目录管理 | 菜鸟笔记收录
  6. 718. 最长重复子数组
  7. HDMI和DVI的HDCP握手问题分析及其解决方案精粹
  8. html 下拉列表返回值,jquery 根据后台返回值来选中下拉框 option 值
  9. 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
  10. OpenGL ES和EGL关系(二十五)
  11. java 栈和队列实现迷宫代码_用栈结构实现队列结构,用队列结构实现栈结构
  12. WKWebView加载HTTPS的链接
  13. python给每个key添加数据_一文看懂Python collections模块的高效数据类型
  14. fx系列微型可编程控制器 通信_西门子系列资料(64本电子书+PLC视频+软件),整理了很久...
  15. VC中GDI绘图技术基础知识:hdc设备环境句柄,坐标系
  16. 拖住对手?有赞刚收费,点点客就推同类免费产品
  17. Unbuntu 安装 TeamViewer14
  18. Google巧妙发布Sky星空地图
  19. 【强化学习】竞争深度Q网络(Dueling DQN)求解倒立摆问题 + Pytorch代码实战
  20. swift linux编译器,Linux平台Swift语言开发学习环境搭建

热门文章

  1. eeglab中文教程系列(9)-绘制ERP图像
  2. VR/AR标准委员会成立,宣布全新的标准OpenXR
  3. ​AMD放出超强新算法,旧N卡也能焕发第二春
  4. “元宇宙”概念引发AR/VR新一轮投资潮,去年Q4融资总额达120亿,超过此前2年总和...
  5. 14岁上大学,29岁拿下教职,如今这位华裔学者拿下Jeffrey Elman大奖
  6. 嬴彻再融超亿美元,宁德时代领投,领跑自动驾驶卡车行业
  7. 对话Nullmax无人车CEO徐雷:造血营收L3,追梦宏图L4
  8. 推特千赞Demo袭来!简笔画变照片的GauGAN,编故事的GPT-2,浏览器皆可玩
  9. VUE 动态给对象增加属性,并触发视图更新。
  10. LeetCode 448. Find All Numbers Disappeared in an Array 442. Find All Duplicates in an Array