2018年第九届蓝桥杯 - 省赛 - C/C++大学B组 - G.螺旋折线
螺旋折線
如圖p1.png所示的螺旋折線經(jīng)過平面上所有整點(diǎn)恰好一次。
對(duì)于整點(diǎn)(X, Y),我們定義它到原點(diǎn)的距離dis(X, Y)是從原點(diǎn)到(X, Y)的螺旋折線段的長度。
例如dis(0, 1)=3, dis(-2, -1)=9
給出整點(diǎn)坐標(biāo)(X, Y),你能計(jì)算出dis(X, Y)嗎?
【輸入格式】
X和Y
對(duì)于40%的數(shù)據(jù),-1000 <= X, Y <= 1000
對(duì)于70%的數(shù)據(jù),-100000 <= X, Y <= 100000
對(duì)于100%的數(shù)據(jù), -1000000000 <= X, Y <= 1000000000
【輸出格式】
輸出dis(X, Y)
【樣例輸入】
0 1
【樣例輸出】
3
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
請(qǐng)嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請(qǐng)您輸入…” 的多余內(nèi)容。
注意:
main函數(shù)需要返回0;
只使用ANSI C/ANSI C++ 標(biāo)準(zhǔn);
不要調(diào)用依賴于編譯環(huán)境或操作系統(tǒng)的特殊函數(shù)。
所有依賴的函數(shù)必須明確地在源文件中 #include
不能通過工程設(shè)置而省略常用頭文件。
提交程序時(shí),注意選擇所期望的語言類型和編譯器類型。
Ideas
一般這種題目都有規(guī)律,所以我們需要把前面幾個(gè)答案都列出來,就有例子了。
然后就是找規(guī)律的內(nèi)容啦,對(duì)于四個(gè)角的內(nèi)容,我們可以發(fā)現(xiàn),右上角的值從4 → 16 → 36 ……
可以發(fā)現(xiàn)這些都是平方數(shù),即 2 * 2 → 4 * 4 → 6 * 6 ……
再把它們的坐標(biāo)考慮進(jìn)來,即 (1 * 2) ^ 2 → (2 * 2) ^ 2 → (2 * 3) ^ 2 ……
找到規(guī)律了,能夠到達(dá)的最外圈右上角的坐標(biāo)等于 (2 * k) ^ 2。
但是這只是確定了一個(gè)坐標(biāo)的位置,如果在其它文件還需要跟它建立聯(lián)系。
可以發(fā)現(xiàn),螺旋折線對(duì)應(yīng)的都是直角拐彎,有單類似于曼哈頓距離,如果能想到這一點(diǎn),這道題就簡單了,每個(gè)節(jié)點(diǎn)的dis距離其實(shí)就是它對(duì)應(yīng)的最外圈右上角節(jié)點(diǎn)距離 (2 * k) ^ 2 再加上該節(jié)點(diǎn)到右上角節(jié)點(diǎn)的曼哈頓距離。
Code
Python
if __name__ == '__main__':x, y = map(int, input().split())k = max(abs(x), abs(y))if x > y:print((2 * k) ** 2 + abs(k - x) + abs(k - y))else:print((2 * k) ** 2 - abs(k - x) - abs(k - y)) 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的2018年第九届蓝桥杯 - 省赛 - C/C++大学B组 - G.螺旋折线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年第九届蓝桥杯 - 省赛 - C
- 下一篇: 2021年第十二届蓝桥杯 - 省赛 -