P8668题解
szh_AK_all · · 题解
题目传送门
这道题可以用暴力枚举来做,但很容易超时,本人认为没必要用枚举法,因为只需要判断语句就够了。下面先看一幅图。
其实做这道题就跟找规律一样,我们把图片分为
一、根据
下面讲述第二种做法。
首先,考虑横轴正上方的线段。我们先看
其次,考虑其他三种线段,规律还是挺好找的。下面直接给出代码。
Code
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long x,y,k;
long long o=0;
cin>>x>>y;
if(y>=(-x)&&y<=x)//纵轴右方
{
k=x*2*x*2+(x-y);
}
else if(y<=(-x)&&y>x)//纵轴左方
{
long long x2=x;
x=-x;
k=(x*2-1)*(x*2-1)+(y-x2-1);
}
else if(y>=0)//横轴上方
{
k=2*y*2*y-(y-x);
}
else if(y<0)//横轴下方
{
long long io=-y*2;
k=(io*(io+1))+(-y-x+1);
}
cout<<k;
}
另外,还有一个重要的点,就是判断点的位置。规律可以根据代码理解。