POJ 1870 Bee Breeding

这种烂题我再也不想见到了!!

比模拟题还讨厌!!

题目大意:

根据题目给出的各个数的位置,求某两个数之间的位置。

解题思路:

由给出的位置可以找到一个规律,二维的六个象限的坐标系,计算坐标然后计算距离就行。

下面是代码:

#include <set>
#include <map>
#include <queue>
#include <math.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>

#define eps 1e-8
#define pi acos(-1.0)
#define inf 107374182
#define inf64 1152921504606846976
#define lc l,m,tr<<1
#define rc m + 1,r,tr<<1|1
#define iabs(x)  ((x) > 0 ? (x) : -(x))
#define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (SIZE))
#define clearall(A, X) memset(A, X, sizeof(A))
#define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE))
#define memcopyall(A, X) memcpy(A , X ,sizeof(X))
#define max( x, y )  ( ((x) > (y)) ? (x) : (y) )
#define min( x, y )  ( ((x) < (y)) ? (x) : (y) )

using namespace std;

void cal(int num,int &x,int &y)
{
    int n=0;
    while(1+3*n*(n+1)<num)n++;  //当不再第n圈范围内时
    if(n==0)
    {
        x=0;
        y=0;
        return;
    }                           //当属于第0圈直接返回
    num=num-1-3*n*(n-1);        //计算num是第n圈的第几个数
    int rou=(num-1)/n;          //计算属于第几象限
    int cnt=(num-1)%n+1;        //计算是第几象限的第几个数
    if(rou==0)x=cnt,y=n-cnt;
    else if(rou==1)x=n,y=-cnt;
    else if(rou==2)x=n-cnt,y=-n;
    else if(rou==3)x=-cnt,y=cnt-n;
    else if(rou==4)x=-n,y=cnt;
    else if(rou==5)x=cnt-n,y=n;
    return ;
}

int main()
{
    int a,b,xa,ya,xb,yb,ans;
    while(scanf("%d%d",&a,&b),a||b)
    {
        cal(a,xa,ya);
        cal(b,xb,yb);
        if((xb-xa)*(yb-ya)<=0)
        {
            ans=iabs(xa-xb);
            if(iabs(xa-xb)<iabs(ya-yb))ans+=iabs(ya-yb)-iabs(xa-xb);
        }
        else
        {
            ans=iabs(ya-yb)+iabs(xa-xb);
        }
        printf("The distance between cells %d and %d is %d.\n",a,b,ans);
    }
    return 0;
}

POJ 1870 Bee Breeding,布布扣,bubuko.com

时间: 2024-12-14 02:54:48

POJ 1870 Bee Breeding的相关文章

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

POJ 2265 Bee Maja (找规律)

题目链接 题意 : 给你两个蜂巢的编号,给你一个的编号让你输出在另外一个蜂巢中对应的编号. 思路 : 先将蜂巢分层,第一层一个数,第二层6个数,第三层12个数…………然后用公式表示出第n层的最后一个数是多少,下图中竖着的是x坐标,斜着的是y坐标,往左横坐标+1,往右横坐标-1,以斜线为准往上纵坐标-1,往下纵坐标+1,(1,1)也就是18是第三圈的第一个数,(2,1)也就是20是第四圈的第一个数. 1 #include <cstdio> 2 #include <cstring> 3

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)

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;

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训练方案-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