题目描述

如图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。
例如dis(0, 1)=3, dis(-2, -1)=9
给出整点坐标(X, Y),你能计算出dis(X, Y)吗?
蓝桥杯:2018年第九届蓝桥杯省赛B组第七题—螺旋折线

输入格式】

对于100%的数据, -1000000000 <= X, Y <= 1000000000

【输出格式】

输出dis(X, Y)

【样例输入】

0 1

【样例输出】

3

思路
先找规律你会发现右上角的那个点满足公式为Dis(x,y)=4xy;所以我们可以从这一点出发来寻找问题的答案。
首先我们先找出这个点位于那一层,然后我们将这个图根据y=x这条直线分隔开来,即分别判断有y>x 和 y<x 和y=x这三种情况
代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(void)
{
    ll x,y,a;
    scanf("%lld%lld",&x,&y);
    a=max(abs(x),abs(y));
    ll t=4*a*a;
    if(x==y&&x==0)printf("0\n");
    else if(x==y&&x>0)printf("%lld\n",t);
    else if(y>x)printf("%lld\n",t-(a-x)-(a-y));
    else printf("%lld\n",t+(a-x)+a-y);
    return 0;
}

相关文章: