如圖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找規律題目,找到規律後細心模擬
我們首先把螺線分為一圈一圈,比如
第一圈,該圈上點的x,y座標絕對值不會超過1:
第二圈,同樣x,y座標絕對值不會超過2:
接著把點分類,分為四類,分別為四條邊的點:
1)x座標等於圈數的點,即右邊垂直的點
2)x座標等於圈數*-1,即左邊垂直的點
3)y座標等於圈數的點,即上面平行的點
4)y座標等於圈數*-1,即下面平行的點
接著對每類點分別求解(下面上面序號對應):
1)可由該圈數右下角的點推出
2)左上角的點推出
3)右上角的點推出
4)左下角的點推出
接著找規律分別求出該圈(圈數可根據輸入推出)的四個頂點,然後細心點便解決了。
具體在**中:
#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
ll x, y;
int main()
if(x==level && y==-level)
if(x==level && y==level)
if(x==-level && y==level)
// 四類點分別求解,細心點很簡單
if(x == -1*level) res = fz-(level-y); //左邊垂直
if(y == level) res = zz-(level-x); //上面並行
if(x == level) res = zf-(y+level); //右邊垂直
if(y == -1*level) res = ff-(x+level); //下面平行
cout << res << endl;
return 0;
}
1237 螺旋折線
如下圖所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離 dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如 dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出 dis x,y 嗎?包含兩個整數 x,y 輸出乙個整數,表示 dis x,...
螺旋折線 2018真題
題目描述 如圖所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出dis x,y 嗎?輸入x和y,資料在int範圍以內。輸出輸出dis x...
螺旋矩陣 題解
螺旋矩陣 問題描述 乙個n行n列的螺旋矩陣可由如下方法生成 從矩陣的左上角 第1行第1列 出發,初始時向右移動 如果前方是未曾經過的格仔,則繼續前進,否則右轉 重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中依次填入1,2,3,n2,便構成了乙個螺旋矩陣。下圖是乙個n 4 時的螺旋矩陣。現...