螺旋折线
如图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#include #include using namespace std; int main(){ int x, y, n, m, sum = 0, res = 0; cin >> n >> m; x = -max(abs(n), abs(m)); // 选绝对值最大的作为标志点 y = x; // 判断输入的点与标志点的位置 if(n == x) res = m - y; else if(n == -x) res = n - x + 2 * abs(y) + abs(y) - m; else if(m == y) res = 6 * abs(y) + abs(x) - n; else if(m == -y) res = 2 * abs(y) + n - x; for(int i = 1; i < abs(x); i++) // 加上之前的每个完整的圈的步数 sum += i * 8; res += sum; if(m < 0 && m == n){ // 如果该店在标志点上时 res = 0; for(int i = 1; i <= abs(x); i++) res += i * 8; } cout << res << endl; }
Comments | NOTHING