时间:2016-04-17 17:11:18 星期日
题目编号:[2016-04-17][Gym][100947][G][Square Spiral Search]
题目大意:就是输出如图坐标对应的数字
![a030df840f82cea67c87b6c9233a4386.jpg]()
分析:
- 观察可以得到,左上角坐标(−a,a)数值是 (2a)2,
- 计算出左上角的数值,然后根据象限,增加或较小相应的数值
- 注意第四象限要分类讨论,
- 在 线y = x下方的,是通过 小的方块计算
- 在上方的,通过大的方块计算
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
int t;
scanf("%d",&t);
while(t--){
ll x,y;
scanf("%I64d%I64d",&x,&y);
ll n = max(abs(x),abs(y));
ll ans = n * n * 4;
ll dx = n + x,dy = n - y;
if(x >= 0 && y >= 0) ans -= dx + dy;
else if(x < 0 && y >= 0)ans += dy - dx;
else if(x < 0 && y < 0) ans += dy + dx;
else {
if(x > -y) ans -= dx + dy;
else ans += dx + dy;
}
printf("%I64d\n",ans);
}
return 0;
}