[2016-04-17][Gym][100947][G][Square Spiral Search]

  • 时间:2016-04-17 17:11:18 星期日

  • 题目编号:[2016-04-17][Gym][100947][G][Square Spiral Search]

  • 题目大意:就是输出如图坐标对应的数字

    a030df840f82cea67c87b6c9233a4386.jpg
  • 分析:

    • 观察可以得到,左上角坐标(a,a)数值是 (2a)2,
    • 计算出左上角的数值,然后根据象限,增加或较小相应的数值
    • 注意第四象限要分类讨论,
      • 在 线y = x下方的,是通过 小的方块计算
      • 在上方的,通过大的方块计算
  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6. int main(){
  7. int t;
  8. scanf("%d",&t);
  9. while(t--){
  10. ll x,y;
  11. scanf("%I64d%I64d",&x,&y);
  12. ll n = max(abs(x),abs(y));
  13. ll ans = n * n * 4;
  14. ll dx = n + x,dy = n - y;
  15. if(x >= 0 && y >= 0) ans -= dx + dy;
  16. else if(x < 0 && y >= 0)ans += dy - dx;
  17. else if(x < 0 && y < 0) ans += dy + dx;
  18. else {
  19. if(x > -y) ans -= dx + dy;
  20. else ans += dx + dy;
  21. }
  22. printf("%I64d\n",ans);
  23. }
  24. return 0;
  25. }


来自为知笔记(Wiz)


posted on 2016-04-17 17:44  红洋  阅读(257)  评论(0)    收藏  举报

导航