时间: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;}