题目:如图所看到的的蜂巢型的图中。蜜蜂想从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. uva 10034 Problem A: Freckles

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. uva 10032 Problem F: Tug of War

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. uva 10026 Problem C: Edit Step Ladders

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  4. (DP)uva 10036 Problem C: Divisibility

    链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88171#problem/F 代码: #include <cstdio> ...

  5. uva 10036 Problem C: Divisibility

    题意:能否在一个整数序列的每相邻的两项之间添加一个加减号,使得最终结果能被一个给定整数K<=100整除. dp[i][j]表示第i个数取余k为j的布尔值. #include <cstdio ...

  6. uva 11400 Problem F Lighting System Design

    紫皮书题: 题意:让你设计照明系统,给你n种灯泡,每种灯泡有所需电压,电源,每个灯泡的费用,以及每个灯泡所需的数量.每种灯泡所需的电源都是不同的,其中电压大的灯泡可以替换电压小的灯泡,要求求出最小费用 ...

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

    , '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...

  8. UVa Live 4670 Dominating Patterns - Aho-Corasick自动机

    题目传送门 快速的通道I 快速的通道II 题目大意 给定一堆短串,和一个文本串,问哪些短串在文本串中出现的次数最多. 我觉得刘汝佳的做法,时间复杂度有问题.只是似乎这道题短串串长太短不好卡.比如给出的 ...

  9. UVa Live 3942 Remember the Word - Hash - 动态规划

    题目传送门 高速路出口I 高速路出口II 题目大意 给定若干种短串,和文本串$S$,问有多少种方式可以将短串拼成长串. 显然,你需要一个动态规划. 用$f[i]$表示拼出串$S$前$i$个字符的方案数 ...

随机推荐

  1. leetcode_998. Maximum Binary Tree II

    https://leetcode.com/problems/maximum-binary-tree-ii/ 在654. Maximum Binary Tree版本的建树基础上,在最后插入一个数. 新节 ...

  2. Day3 CSS 引入及基本选择器

    一 .CSS 层叠样式表,为了使网页元素的样式更加丰富,内容与样式拆分开来.HTML负责结构与内容,表现形式交给CSS. CSS注释/**/ 来注释 二.CSS基本语法与引用 CSS的语法结构 选择器 ...

  3. Python2和Python3除法

    Python2和Python3除法   Python2除法:/,//,% "/":整数相除,向下取整:浮点数相除,结果包含小数(类似1/2,想保留小数应该写成1.0/2或者1*1. ...

  4. js 异步提交文件

    <form method="POST" action="${ctx}/statement/manage/upload" name="form&q ...

  5. 2.10.1 article元素

    嵌套 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <titl ...

  6. Hadoop环境搭建、启动和管理界面查看

    一.hadoop环境搭建: 1. hadoop 6个核心配置文件的作用:core-site.xml:核心配置文件,主要定义了我们文件访问的格式 hdfs://hadoop-env.sh:主要配置我们的 ...

  7. react-native IOS Build input file cannot be found: '~~~~~/node_modules/react-native/Libraries/WebSocket/libfishhook.a'

    尝试添加或者删除libfishhook.a 如果解决了你的问题请点个赞!

  8. cc.Node—坐标系统

    cc.Vec21: cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二外向量;2: cc.pSub: 向量相减 ...

  9. 用1天快速上手org-mode(windows系统)

    Table of Contents 1. 选择Emacs的理由--Org-mode 1.1. 现状(基于本人现有软件的使用) 1.2. 理念(够用才好) 1.3. 学习过程(少走弯路) 2. 快速安装 ...

  10. 在你的Android手机上运行Linux

    之前试过许多方法(也就几种),像什么Complete Linux Installer,Debian noroot,利用已有的Linux构造Bootstrap之类,要么就是复杂得要命(调了两天没有调出来 ...