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
#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;
ToTensor's avatar
ToTensor 已提交
60
        __________________;
每日一练社区's avatar
每日一练社区 已提交
61 62 63 64 65 66 67 68 69 70
    }

    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);
```