题目
如下图所示的螺旋折线经过平面上所有整点恰好一次。
对于整点 (X,Y)
,我们定义它到原点的距离 dis(X,Y)
是从原点到 (X,Y)
的螺旋折线段的长度。
例如 dis(0,1)=3,dis(−2,−1)=9
给出整点坐标 (X,Y)
,你能计算出 dis(X,Y)
吗?
输入格式
包含两个整数 X,Y
。
输出格式
输出一个整数,表示 dis(X,Y)
。
数据范围
−109≤X,Y≤109
输入样例:
0 1
输出样例:
3
思路
n代表圈数
我们将所有的点标出来可以发现上图的规律
绿色的是判断所求点在那个边
黑色的是每个端点的值
我们先求出端点的值,在计算出所求的点到端点的距离,相加即为结果。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int x,y,n;
cin>>x>>y;
ll res;
if(abs(x)<=y&&y>0) {//上
n=y;
res=(ll)(2*n-1)*(2*n)+(x-(-n));
cout<<res<<endl;
}
else if(abs(y)<=x&&x>0){//右
n=x;
res=(ll)(2*n)*(2*n)+(n-y);
cout<<res<<endl;
}
else if(abs(x)<=abs(y)+1&&y<=0){//下
n=abs(y);
res=(ll)(2*n)*(2*n+1)+(n-x);
cout<<res<<endl;
}
else if(abs(y)<=abs(x)&&x<0) {//左
n=abs(x);
res=(ll)(2*n-1)*(2*n-1)+(y-(-n+1));
cout<<res<<endl;
}
return 0;
}
题目链接
https://www.acwing.com/problem/content/1239/
各位小伙伴们快试试吧!