zoukankan      html  css  js  c++  java
  • C

     
    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

    Description

    Valera the horse lives on a plane. The Cartesian coordinate system is defined on this plane. Also an infinite spiral is painted on the plane. The spiral consists of segments: [(0, 0), (1, 0)][(1, 0), (1, 1)][(1, 1), ( - 1, 1)][( - 1, 1), ( - 1,  - 1)][( - 1,  - 1), (2,  - 1)],[(2,  - 1), (2, 2)] and so on. Thus, this infinite spiral passes through each integer point of the plane.

    Valera the horse lives on the plane at coordinates (0, 0). He wants to walk along the spiral to point (x, y). Valera the horse has four legs, so he finds turning very difficult. Count how many times he will have to turn if he goes along a spiral from point (0, 0) to point (x, y).

    Input

    The first line contains two space-separated integers x and y(|x|, |y| ≤ 100).

    Output

    Print a single integer, showing how many times Valera has to turn.

    Sample Input

    Input
    0 0
    Output
    0
    Input
    1 0
    Output
    0
    Input
    0 1
    Output
    2
    Input
    -1 -1
    Output
    3

    题意:给出一个从原点开始螺旋前进的移动规则,现要到达有限范围内的某个坐标,问一共需要几次转向。
    模拟。
    思路:画一下图找下规律就OK了,开始我以为输入的点只是该点所在正方形上的顶点,其实它是该正方形上任意一个整数点。
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int x,y;
    10     while(~scanf("%d %d",&x,&y))
    11     {
    12         if(x == 0 && y == 0)
    13         {
    14             printf("0
    ");
    15             continue;
    16         }
    17         int k = max(abs(x),abs(y));
    18         int ans = (k-1)*4;
    19         if(x >= k-1 && x <= k && y == 1-k)
    20             printf("%d
    ",ans);
    21         else if(x == k && y >= 1-k && y <= k)
    22             printf("%d
    ",ans+1);
    23         else if(x >= -k && x <= k && y == k)
    24             printf("%d
    ",ans+2);
    25         else if(x == -k && y >= -k && y <= k)
    26             printf("%d
    ",ans+3);
    27         else if(x >= -k && x <= k && y == -k)
    28             printf("%d
    ",ans+4);
    29     }
    30     return 0;
    31 }
    View Code
  • 相关阅读:
    ORACLE锁表问题
    迅雷极速版解决版本太旧提示问题
    迅雷极速版任务出错的解决办法(亲测可用)
    百度文库免积分免费下载工具的原理与实现
    C#启动另一个应用程序并传参数
    C#设置WebBrowser IE浏览器版本
    JS强制刷新页面、清除缓存刷新
    JS播放声音
    Chrome插件(扩展)开发全攻略
    IIS7.5全站301跳转,内页+带参数url,这才是真正的全站跳转
  • 原文地址:https://www.cnblogs.com/LK1994/p/3443732.html
Copyright © 2011-2022 走看看