51nod 1740蜂巢迷宫

1740蜂巢迷宫

题目

51nod 1740蜂巢迷宫_第1张图片
有一个无限大的蜂巢迷宫,为了方便表示每一个六边形格子,现在把座标引入到这个迷宫中,如上图年示。

艾瑞特在这个迷宫中街,刚开始他在(0,0)的位置,按照下图所示的路线在这个迷宫中行走。
51nod 1740蜂巢迷宫_第2张图片
走了n步以后,他想知道自己在哪个位置了

输入

单组测试数据。
一个整数n (0≤n≤10^18),表示艾瑞特移动的步数。

输出

输出两个整数x和y,表示艾瑞所在的座标。

思路

首先确定好层数
由于每一层的砖块数分别为6,12,18,24…递增
所有可以依照此规律来计算出层数
然后确定其具体位置
六边形有六个方向
其六个边角延伸的坐标其实就是直线函数换算就可以了
不在边角上的块就要根据其所在具体位置分六种情况讨论

代码

#include
#include
using namespace std;
int main(){
long long x,r=0;
cin>>x;
if(x==0)cout<<"0 0"<r){
    layer++;
    i++;
    r+=6*i;
}

long long step=x-r+6*i;
    long long side=step/layer;
    long long pos=step%layer;
    switch(side){
case 0:
    o1=layer*2;o2=0;
    if(pos!=0){
        for(int j=0;j

你可能感兴趣的:(算法学习中)