UVa808 - Bee Breeding(坐标法)

题意:给定图中蜂窝两点,求最短距离

思路:建坐标系,然后根据图中走的顺序把每个点的坐标求出来,然后利用坐标去求最小距离

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
const int N = 20005;
const int d[5][2]={{-1,1},{0,2},{1,1},{1,-1},{0,-2}};
struct Point{
    int x,y;
    Point(){}
    Point(int _x,int _y){
        x=_x;y=_y;
    }
}p[N];
int a,b;
void init(){
    int pn=1,x=0,y=0;
    p[pn++]=Point(x,y);
    y-=2;
    p[pn++]=Point(x,y);
    for(int i=1;i<=60;i++){
        int j,k;
        for(j=0;j<5;j++){
            for(k=0;k<i;k++){
                x+=d[j][0];y+=d[j][1];
                p[pn++]=Point(x,y);
            }
        }
        y-=2;
        p[pn++]=Point(x,y);
        for(j=0;j<i;j++){
            x--;y--;
            p[pn++]=Point(x,y);
        }
    }
}
int main()
{
    init();
    while(~scanf("%d%d",&a,&b)&&a||b){
        int x=abs(p[a].x-p[b].x);
        int y=abs(p[a].y-p[b].y);
        printf("The distance between cells %d and %d is ",a,b);
        if(y <= x) printf("%d.\n",x);
        else {
            printf("%d.\n",x+(y-x)/2);
        }
    }
    return 0;
}
时间: 2024-12-24 07:02:56

UVa808 - Bee Breeding(坐标法)的相关文章

POJ 1870 Bee Breeding

这种烂题我再也不想见到了!! 比模拟题还讨厌!! 题目大意: 根据题目给出的各个数的位置,求某两个数之间的位置. 解题思路: 由给出的位置可以找到一个规律,二维的六个象限的坐标系,计算坐标然后计算距离就行. 下面是代码: #include <set> #include <map> #include <queue> #include <math.h> #include <vector> #include <string> #includ

POJ 1870 Bee Breeding(找规律)

题目链接 题意 : 给你一个蜂巢状图形,让你找出两个点之间的距离. 思路 : 在做这个题之前可以看一下2265,因为是一种题来着,规律就是我在2265里写的那样,然后就是求距离了,求距离的时候只需考虑两个点的坐标差值(x,y),把坐标差值分成四个项限,x>0且y>0,或x<0且y<0为abs(x+y),其他情况则是max(abs(x),abs(y)).. 1 #include <cstdio> 2 #include <cstring> 3 #include

uva 808 - Bee Breeding(坐标问题)

题目链接:uva 808 - Bee Breeding 题目大意:按照题目中图片的方式将所有的正六边形标上序号,然后给出两个序号,问这两六边形最短要走多少步. 解题思路:将图中的坐标系进行修改 这样,每个位置和周围(除了左上角和右下角)位置相邻,只需要一步. 并且建坐标的方法可以按照6条边的方式 #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using

UVa 808 (建坐标系、找规律) Bee Breeding

题意: 如图,按照图中的规律给这些格子编号.给出两个格子的编号,求从一个格子到另一个格子的最少步数.(一步只能穿过有有公共边的格子) 分析: 根据高中数学知识,选任意两个不共线的向量,就能表示平面上所有点. 像这样建立坐标系,根据图中的规律算出所有点的坐标. 推理也好,找找规律也好,不难发现 第一.三象限的点(x, y)到原点的距离为 |x| + |y| 第二.四象限的点(x, y)到原点的距离为 max{|x|, |y|} 递推点的坐标的时候也是比较注意细节的,否则很容易出错. 1 #incl

poj1870 Bee Breeding

题意:首先给的图不是很清楚  为了好说明  用下图示范 如图  这是一个蜂窝  1在中间 然后依次旋转扩散开来 (每个数字代表一个小孔)  然后给你两个数字 让你求出这两孔之间的最小距离: 分析: 首先建个坐标系(二维的)   把每个孔都坐标化  如图 PS:这个横纵坐标轴可以随意 设置 接下来求小孔的坐标, 由第一个图我们可以知道第一个小孔周围是6个孔 再往外是12,24... 所以我们可以根据等差求和公式求出 所求小孔在第几圈 ,并且由第二个图我们可以发现第p圈的最后一个孔的坐标为(p,0)

UVA - 808 Bee Breeding (建立坐标系&amp;找规律)

题目: 输入两个格子的编号a和b(a,b≤10000),求最短距离.例如,19和30的距离为5(一条最短路是19-7-6-5-15-30). 思路: 如图建立坐标系,然后看两个点的向量如果位于二四象限答案为向量坐标绝对值的和,向量位于一三象限答案为向量坐标绝对值的最大值. 看网上的博客的思路--(菜是原罪) 难点是建立坐标系. 代码: #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define MAX 1000000000 #define F

北大ACM题库习题分类与简介(转载)

在百度文库上找到的,不知是哪位大牛整理的,真的很不错! zz题 目分类 Posted by fishhead at 2007-01-13 12:44:58.0 -------------------------------------------------------------------------------- acm.pku.edu.cn 1. 排序 1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 23

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348