solution.md 1.4 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2
# 螺旋折线

每日一练社区's avatar
每日一练社区 已提交
3 4
如图所示的螺旋折线经过平面上所有整点恰好一次。 
 
每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
对于整点(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
```

以下程序实现了该功能,请你补全空白处内容:

每日一练社区's avatar
每日一练社区 已提交
42
```c
每日一练社区's avatar
每日一练社区 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int x, y;
    cin >> x >> y;
    long long sum = 0;

    if ((y < x) && (-y <= x))
    {
        sum += x > 1 ? (long long)(4 * (2 + (abs(x) - 1) * (abs(x) - 2))) : 0;
        sum += (long long)x > 0 ? (4 * x + (x - y)) : (y - x);
    }
    else
    {
        sum += y > 1 ? (long long)(4 * (2 + (abs(y) - 1) * (abs(y) - 2))) : 0;
        __________________
    }

    cout << sum << endl;
    return 0;
}
```


## 答案

每日一练社区's avatar
每日一练社区 已提交
71
```c
每日一练社区's avatar
每日一练社区 已提交
72 73 74 75 76 77 78
sum += (long long)y > 0 ? (2 * y + y + x) : (6 * y - y - x);
```

## 选项

### A

每日一练社区's avatar
每日一练社区 已提交
79
```c
每日一练社区's avatar
每日一练社区 已提交
80 81 82 83 84
sum += (long long)y > 0 ? (2 * y + x) : (6 * y - y - x);
```

### B

每日一练社区's avatar
每日一练社区 已提交
85
```c
每日一练社区's avatar
每日一练社区 已提交
86 87 88 89 90
sum += (long long)y > 0 ? (2 * y + y + x) : (6 * y - x);
```

### C

每日一练社区's avatar
每日一练社区 已提交
91
```c
每日一练社区's avatar
每日一练社区 已提交
92 93
sum += (long long)y > 0 ? (2 * y + x) : (6 * y - x);
```