zoukankan      html  css  js  c++  java
  • codeforces 11B Jumping Jack

    Jack is working on his jumping skills recently. Currently he's located at point zero of the number line. He would like to get to the point x. In order to train, he has decided that he'll first jump by only one unit, and each subsequent jump will be exactly one longer than the previous one. He can go either left or right with each jump. He wonders how many jumps he needs to reach x.

    Input

    The input data consists of only one integer x ( - 109 ≤ x ≤ 109).

    Output

    Output the minimal number of jumps that Jack requires to reach x.

    Example

    Input
    2
    Output
    3
    Input
    6
    Output
    3
    Input
    0
    Output
    0

    这题想的很僵硬,想了一个小时才想出来。
    题意:步数从1开始递增,只能选择向左走和向右走。问到达x最少要走几次。
    解题思路:可以很轻易的(我推了半小时才反应过来)的想出 x=1±2±3±...n;
    对吧,因为不是向左走就是向右走嘛,所以不是加就是减。
    这样我们可以推出x肯定在1到1+2+3+...n之间(包括n。
    所以我们找第一个大于等于x的 1~n和,如果刚好等于就直接输出步数。
    如果大于x,就找第一个大于x且与x差为偶数的数。(这需要一点脑洞
    因为x+n与x-n的差肯定是个偶数,而1~n的和包含了从2,4,6,8一直到n的所有偶数,所以只要找到离x最近的差为偶数的 1~n和,就是答案了。

    说的比较乱,不懂的话可以自己写1到10的例子走一下就明白了。

    附ac代码:
     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cmath>
     4 #include <string>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <queue>
     8 #include <map>
     9 #include <vector>
    10 using namespace std;
    11 const int maxn = 1e6+10;
    12 typedef long long ll;
    13 const ll mod = 1e9+7;
    14 const int inf = 0x3f3f3f3f;
    15 const double eps=1e-6;
    16 ll ans[maxn];
    17 ll l[maxn];
    18 ll r[maxn];
    19 int main() {
    20     ios::sync_with_stdio(false);
    21     int n;
    22     cin>>n;
    23     n=abs(n);
    24     if(n==0)
    25     {
    26         cout<<0<<endl;
    27         return 0;
    28     }
    29     for(int i=1;i<=1e9;++i)
    30     {
    31         ll s=i*(i+1)/2;
    32         if(s==n)
    33         {
    34             cout<<i<<endl;
    35             break;
    36         }
    37         else if(s>n &&(s-n)%2==0)
    38         {
    39             cout<<i<<endl;
    40             break;
    41         }
    42     }
    43     return 0;
    44 }
    View Code


  • 相关阅读:
    生成器
    各种表达式
    迭代器
    闭包函数及装饰器
    名称空间及作用域
    函数的嵌套
    函数对象
    OpenSSL Heartbleed “心脏滴血”漏洞简单攻击示例
    PHP函数usort是咋回事?还能当后门?
    CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
  • 原文地址:https://www.cnblogs.com/zmin/p/8398512.html
Copyright © 2011-2022 走看看