如圖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
資源約定:
峯值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。
注意:
main函數需要返回0;
只使用ANSI C/ANSI C++ 標準;
不要調用依賴於編譯環境或操作系統的特殊函數。
所有依賴的函數必須明確地在源文件中 #include <xxx>
不能通過工程設置而省略常用頭文件。
提交程序時,注意選擇所期望的語言類型和編譯器類型。
思路:
找角的點的規律 , 從右上角開始 , 藍色的是4*x^2 或者 4*y^2, 綠色 和 紫色通過藍色推出來
分成四個區間,分別判斷
#include <iostream>
using namespace std;
int main()
{
int x,y,dis;
cin>>x>>y;
if(x>=0&&y>=0) //第一區間
{
if(x>=y)
dis=4*x*x+x-y;
else
dis=4*y*y+x-y;
}
else if(x>=0&&y<=0) //第四區間
{
if(x>=-y)
dis=4*x*x+x-y;
else
dis=4*y*y-3*y-x;
}
else if(x<=0&&y>=0) //第二區間
{
if(x>=-y)
dis=4*y*y+x-y;
else
dis=4*x*x+3*x+y;
}
else if(x<=0&&y<=0) //第三區間
{
if(y>=x+1)
dis=4*x*x+3*x+y;
else
dis=4*y*y-3*y-x;
}
cout<<dis<<endl;
return 0;
}