zoukankan      html  css  js  c++  java
  • codeforces A. Point on Spiral 解题报告

    题目链接:http://codeforces.com/problemset/problem/279/A

    题目意思:给出一个坐标点(x, y),问当从(0, 0) 开始到达该点转过的拐角有多少个。(拐角是这样的:(0, 0) -> (1, 0) -> (1, 1) -> (-1, 1) -> (-1, -1) -> (2, -1) -> (2, 2) ->...),总的来说,对于每一圈可以想成它是从坐标系的第四象限开始的(x > 0 && y < 0)

           这道题考的主要是观察能力,最重要的还有细心!!

      可以发现,每一圈有四个拐角:(x, -(y+1)),(x, x),(-x, x),(-x, -x),那么求第 i 个圈时总共经过的拐角,就等于前 i-1 圈经过的拐角 + 第 i 圈经过的拐角。第 i  圈经过的拐角比较棘手,总的来说就是考细心了。特别注意的是,当输入的点为(x, -x)时,要在算出的拐角前提下再加3,因为这点实质在第 i+1 圈中,3的意思表示第 i 圈的3个拐角

         

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     int x, y, ans;
    10     while (scanf("%d%d", &x, &y) != EOF)
    11     {
    12         if (abs(x) <= 1 && abs(y) <= 1)  // 1/0
    13         {
    14             if (x == 0 && y == 0 || x == 1 && y == 0)   
    15                 printf("0
    ");
    16             else if (x == 1 && y == 1)
    17                 printf("1
    ");
    18             else if (y == 1)                
    19                 printf("2
    ");
    20             else if (x == -1)
    21                 printf("3
    ");
    22             else
    23                 printf("4
    ");
    24         }
    25         else
    26         {    
    27             if (abs(x) > abs(y))
    28                 ans = (abs(x)-1) * 4;  // 前round
    29             else
    30                 ans = (abs(y)-1) * 4;
    31             // 四角
    32             if (x > 0 && abs(y) <= abs(x))
    33             {
    34                 if (x != -y+1)
    35                 {
    36                     ans += 1;
    37                     if (-y == x)
    38                         ans += 3;
    39                 }
    40             }
    41             else if (y > 0 && abs(x) <= abs(y))
    42                 ans += 2;
    43             else if (x < 0 && abs(x) >= abs(y))
    44                 ans += 3;
    45             else
    46                 ans += 4;
    47             printf("%d
    ", ans);
    48         }   
    49     }
    50     return 0;
    51 }            
  • 相关阅读:
    使用yum时,保留下载包设置
    df命令
    Linux Shell脚本实现根据进程名杀死进程
    centos 清理内存缓存
    sgdisk常用操作
    CentOS7 bonding配置
    linux下显示dd命令的进度:
    OSD磁盘日常监控
    flashcache
    Elasticsearch request body检索
  • 原文地址:https://www.cnblogs.com/windysai/p/3551943.html
Copyright © 2011-2022 走看看