码迷,mamicode.com
首页 > 其他好文 > 详细

Jumping Jack CodeForces - 11B

时间:2017-11-09 22:39:41      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:for   .net   ==   return   差值   code   跳过   col   ret   

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 }

Jumping Jack CodeForces - 11B

标签:for   .net   ==   return   差值   code   跳过   col   ret   

原文地址:http://www.cnblogs.com/hehe54321/p/cf-11b.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!