zoukankan      html  css  js  c++  java
  • Jumping Jack CodeForces

    Jumping Jack CodeForces - 11B

    就是一个贪心。

    基本思路:

    正负没有关系,先取绝对值。

    首先跳过头,然后考虑怎么回来。

    设超过头的步数为kk。如果kk为偶数,那么直接在前面跳过来的步数中选一个kk/2的步数,改成反着跳即可,不需要额外步数。

    如果kk为奇数:

    显然如果只把前面跳的改成反着跳不可能导致位置与目标位置差值的奇偶性变化,而kk为奇数,需要达到的差值0是偶数,因此一定需要额外步数。

    那么可能有两种情况:

    设当前已经跳了p步。如果p为偶数,那么这一步的下一步(p+1)为奇数,只需要再跳一步,并且在前面找到一步为(kk+p+1)/2改成反着跳即可,需要1步额外的。(试一试能发现一定能找到改法,也不难证)

    如果p为奇数,那么(p+1)为偶数,(p+1)为奇数,显然现在需要奇数步来使得位置与目标位置的差值由奇变成偶,因此要额外走2步。(试一试能发现一定能找到改法)

    当然,像我这样做,有一些性质在距离为0的时候会出现不适合的情况,因此需要特判0。

    错误记录:

    找规律以偏概全,23行写成if((tt+1)%2==1)

     1 #include<cstdio>
     2 typedef long long LL;
     3 LL x,tt,p,kk;
     4 int main()
     5 {
     6     scanf("%lld",&x);
     7     if(x==0)
     8     {
     9         printf("0");
    10         return 0;
    11     }
    12     if(x<0)
    13         x=-x;
    14     while(true)
    15     {
    16         tt+=++p;
    17         if(tt>=x)    break;
    18     }
    19     kk=tt-x;
    20     if(kk%2==1)
    21     {
    22         p++;
    23         if(p%2==0)
    24             p++;
    25     }
    26     printf("%lld",p);
    27     return 0;
    28 }
  • 相关阅读:
    Java常见的10个异常
    HashMap 和 Hashtable 的 6 个区别
    JSP随记
    Java> ArrayList的扩容因子为什么是1.5?
    Java> 有趣的byte及位运算
    前导0计数Integer.numberOfLeadingZeros,后缀0计数Integer.numberOfTailingzeros
    结构型模式
    结构型模式
    结构型模式
    结构型模式
  • 原文地址:https://www.cnblogs.com/hehe54321/p/cf-11b.html
Copyright © 2011-2022 走看看