在B站上学到的一位大佬的思路,如下:
//核心在于改变图形模样,使其变成一个简易图形
//以第一圈为例 将第一个线段以点(-1,0)为中心顺时针方向旋转90°
//这会形成一个正方形 而后将每个多出来的线段移位
//使螺旋折现变成一个又一个的同心正方形
//再根据x,y的正负取值进行分类讨论
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
int x,y,dis=0;
cin >> x >> y;
int jud = max(abs(x),abs(y));//点所在的层数
int inside=0,outside=0;
if(x==0&&y==0){
inside=outside=0;
}
for(int i=1;i<jud;i++)
inside+=i*8;
if(jud == abs(y)){
if(y>0) outside=3*y+x;
else outside=7*(-y)-x;
}
if(jud == abs(x)){
if(x>0) outside=5*x-y;
else outside=(-x)+y;
}
dis = inside + outside;
cout << dis;
return 0;
}
0 回复
0 转发
2 喜欢
17 阅读



