螺旋折線 詳細題解

2021-10-03 02:36:53 字數 1701 閱讀 8842

如圖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 時的螺旋矩陣。現...