2018年第九届蓝桥杯第7题 螺旋折线


标题:螺旋折线

如图p1.png所示的螺旋折线经过平面上所有整点恰好一次。  
对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。

 

例如dis(0, 1)=3, dis(-2, -1)=9  

给出整点坐标(X, Y),你能计算出dis(X, Y)吗?

【输入格式】
X和Y  

对于40%的数据,-1000 <= X, Y <= 1000  
对于70%的数据,-100000 <= X, Y <= 100000  
对于100%的数据, -1000000000 <= X, Y <= 1000000000  

【输出格式】
输出dis(X, Y)  


【样例输入】
0 1

【样例输出】
3
题解:将每个外围的第一根折线顺时针旋转90°(不影响结果),可以看出是由一个一个正方形构成的图像,所以只需算出所给点内部包围的所以正方形周长ans1和1所给点在最外层的折线长度ans2即可;

(x,y)点所在的一个正方形的边长的一半为 a=max(abs(x),abs(y))

ans1=8×(1+2+3+...+a-1)=4*a*(a-1)

当x>=0时:

    若y>=0,ans2=3a+x+a-y=4a+x-y;

若y<0,ans2=5a-y+a-x=6a-x-y;

    当x<0,ans=x-(-a)+y-(-a)=2a+x+y;

#include<iostream>
#include<math.h>
#define ll long long
using namespace std;
int main()
{
        ll x,y;
        while(~scanf("%lld %lld",&x,&y))
        {
                ll a=max(abs(x),abs(y));
                ll ans2,ans1=4*(a-1)*a;
                if(x<0){
                        ans2=x+y+2*a;
                }else{
                        if(y>=0)
                                ans2=4*a+x-y;
                        else
                                ans2=6*a-x-y;
                }
                printf("%lld\n",ans1+ans2);
        }
        return 0;
}

 

转载于:https://www.cnblogs.com/aeipyuan/p/10704485.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值