第九屆藍橋杯省賽B組 7.螺旋折線
阿新 • • 發佈:2018-11-16
標題:螺旋折線 如圖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
#include <bitset> #include <iostream> #include <cstdio> #include <cmath> using namespace std; int main() { int n, x, y, sum; cin >> x >> y; if (x > 0 && y >= 0) { n = max(abs(x), abs(y)) - 1; sum = 4 * n * n + 4 * n; if (abs(y) < abs(x)) sum += 5 * abs(x) - abs(y); else sum += 5 * abs(y) - abs(x); cout << sum; } if (x <= 0 && y > 0) { n = max(abs(x), abs(y)) - 1; sum = 4 * n * n + 4 * n; if (abs(y) < abs(x)) sum += abs(x) + abs(y); else sum += 3 * abs(y) - abs(x); cout << sum; } if (x < 0 && y <= 0) { n = max(abs(x), abs(y)) - 1; sum = 4 * n * n + 4 * n; if (abs(y) <= abs(x)) sum += 1 + n - abs(y); else sum += abs(x) - n; cout << sum; } if (x >= 0 && y < 0) { n = max(abs(x), abs(y)) - 1; sum = 4 * n * n + 4 * n; if (abs(y) < abs(x)) sum += 5 * abs(x) + abs(y); else sum += 7 * abs(y) - abs(x); cout << sum; } return 0; }