每週一題 4

2021-10-02 10:27:15 字數 2169 閱讀 2093

如圖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

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

第九屆藍橋杯省賽b組

首先觀察圖中螺旋折線的軌跡,以每個拐點為一次轉折(也就是說將每兩個拐點中間的一條直線看作乙個週期),根據圖中已經畫出來的部分,可以列出這樣的軌跡變化:

1>由原點出發

2>向左走,1個單位

3>向上走,1個單位

4>向右走,2個單位

5>向下走,2個單位

6>向左走,3個單位

7>向上走,3個單位

8>向右走,4個單位

9>向下走,4個單位

10>向左走,5個單位

11>向上走,5個單位

12>向右走,6個單位

13>向下走,6個單位

……列出了前幾步,就很容易總結出軌跡的規律了:

一、從起點開始,每兩次轉折看作乙個週期,第i個週期時就走i個單位長度。

二、當i為奇數時,先向左再向上走;當i為偶數時,先向右再向下走。

int x=

0,y=0;

//定義起點座標

int px,py;

//定義要找到的點的座標

cin>>px;cin>>py;

int n=1;

//記奇偶次數

int cnt=0;

//走的格數

第奇數次時,向左上走,用橫座標減,縱座標加。每走乙個單位長度就要做一次判斷,判斷是否到達終點,如果到達了就退出。

if

(n%2==1

)if(x==px && y==py)

break

;for

(int i=

0;i(x==px && y==py)

break

;}

第偶數次時,向右下走,用橫座標加,縱座標減。

if

(n%2==1

)if(x==px && y==py)

break

;for

(int i=

0;i(x==px && y==py)

break

;}

以下為全部**。

#include

using

namespace std;

intmain()

if(x==px && y==py)

break

;for

(int i=

0;i(x==px && y==py)

break;}

if(n%2==

0)if(x==px && y==py)

break

;for

(int i=

0;i(x==px && y==py)

break;}

n++;}

cout<

}

hihoCoder每週一題

時間限制 10000ms 單點時限 1000ms include include include include includeusing namespace std int n,m define max 26 struct trie trie void createtrie char str el...

每週一題(1)

把2019分解成3個各不相同的正整數之和,並且要求每個正整數都不包含數字2和4.一共有多少種不同的分割方法。注意交換3個整數的順序被視為同一種方法1,例如1000 1001 18和1001 1000 18被視為同一種。這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為乙個整數,在提交答案...

每週一題 5

小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個時...