如圖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個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個時...