这种题就是找规律,比较费时间,但一旦做出来基本就100%分了。。比赛的时候没来得及做,现在又返回来看了看,感觉不是很难,规律就是+1+1+2+2+3+3+4+4...就是第三象限处理时有些麻烦,附上代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int INF=0x3f3f3f3f;
#define ll long long
ll x,y;
int sign;//处于第几象限
ll ans;
int main()
{
while(scanf("%I64d%I64d",&x,&y)==2)
{
if(x==0&&y==0)
{
printf("0\n");
continue;
}
ll t=max(abs(x),abs(y));
if(x>=0&&y>0)
{
sign=1;//第一象限
ans=4*t*t;
if(abs(y)==t)
ans-=(t-x);
else
ans+=(t-y);
}
else if(x<0&&y>=0)
{
sign=2;//第二象限
ans=4*t*t-2*t;
if(abs(y)==t)
ans+=(x-(-t));
else
ans-=(t-y);
}
else if(x<=0&&y<0)
{
sign=3;//第三象限
if(abs(x)>abs(y))
t=abs(x);
else
t=abs(y)+1;
ans=(2*t-1)*(2*t-1);
if(abs(x)==t)//注意!
ans+=(y-(1-t));
else
ans-=(x-(-t));
}
else if(x>0&&y<=0)
{
sign=4;//第四象限
ans=4*t*t+2*t;
if(abs(y)==t)
ans+=(t-x);
else
ans-=(y-(-t));
}
printf("%I64d\n",ans);
}
return 0;
}
附上一个测试样例的博客:https://blog.csdn.net/u013377068/article/details/79780383