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

Jump back

时间:2017-10-30 11:25:00      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:end   code   logs   偶数   好的   stream   超过   绝对值   pac   

题目链接:

http://codeforces.com/problemset/problem/11/B

 

题目大意:

  一个人在x轴上走,他要到达点x,他第一次只能走一步,以后的每一次都要比上一次步数大1,问要走多少次才能到达点x。

题目解析:

  这道题关键找到规律,一旦找到解题是很快的。对于负数,我们可以取绝对值,因为正负是等效的。首先,我们想想,如果我们能朝着一个方向一直走,刚好能到达点x,这样是最好的,走的次数也是最小的。但如果不能,我们势必会超过点x,这时我们记超过的这点为y。如果(y - x)为偶数,那么就要在第(y - x)/  2次时 朝回走,为什么呢? 因为我们超过的步数为偶数,就需要把这多出的步数抵消掉。我们知道,一个人往回走2步,再往前走2步,他的位置是不变的,但他多走了4步。如果我们把多出的步数一半的先往回走,再往前走,是不是就抵消掉了。因为每次步数要加1,所以应该在(y - x)/  2次时往回走,这样就能到达点x。那如果超出的步数是奇数呢?只要再走一次变成偶数就行了。

 

参考代码:

 1 #include <iostream>
 2 #define ll long long
 3 using namespace std;
 4 
 5 int main(){
 6     ll x;
 7     ll res, now;
 8     while(cin>>x){
 9         res = now = 0;
10         if (x < 0) x = -x;
11         while(now < x || (now - x) % 2) {
12             ++res;
13             now += res;
14         }
15         cout<<res<<endl;
16     }
17 }

 

Jump back

标签:end   code   logs   偶数   好的   stream   超过   绝对值   pac   

原文地址:http://www.cnblogs.com/garden6zg/p/7753111.html

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