題目
如下圖所示的螺旋折線經過平面上所有整點恰好一次,

對于整點 (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/
各位小伙伴們快試試吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/274722.html
標籤:其他
上一篇:專升本計算機綜合-資料結構篇
下一篇:SIMD
