solution.md 1.5 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 71
#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;
}
```

## aop

### before

每日一练社区's avatar
每日一练社区 已提交
72
```c
每日一练社区's avatar
每日一练社区 已提交
73 74 75 76 77

```

### after

每日一练社区's avatar
每日一练社区 已提交
78
```c
每日一练社区's avatar
每日一练社区 已提交
79 80 81 82 83

```

## 答案

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

## 选项

### A

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

### B

每日一练社区's avatar
每日一练社区 已提交
98
```c
每日一练社区's avatar
每日一练社区 已提交
99 100 101 102 103
sum += (long long)y > 0 ? (2 * y + y + x) : (6 * y - x);
```

### C

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