AcWing 1237. 螺旋折线
原题链接
中等
作者:
高海亮
,
2020-10-12 16:41:55
,
所有人可见
,
阅读 365
按照三条(其实是四条)直线,划分成四个区间,根据右上角和左下两个点,确定每个点
y=-x
y=x+1
y=x
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+5;
typedef long long ll;
ll sum1(ll n)
{
return 4*n*n;
}
ll sum2(ll n)
{
return 4*n*n+4*n+1;
}
ll dfs(ll x,ll y)
{
if(x==0&&y==0)
return 0;
if(y>=x&&y>-x)
{
return sum1(y)+x-y;
}
else if(y>-x&&y<=x)
{
return sum1(x)+x-y;
}
else if(y<=-x&&y<x+1)
{
return sum2(-y)-(x-(y-1));
}
else
{
return sum2(-x-1)+(y-(x+1));
}
}
int main()
{
ll x,y;
cin>>x>>y;
cout<<dfs(x,y)<<endl;
}