cf 11B Jumping Jack(贪心,数学证明一下,,)
2015-03-02 18:58
288 查看
题意:
给一个数X。
起始点为坐标0。第1步跳1格,第2步跳2格,第3步跳3格,.....以此类推。
每次可以向左跳或向右跳。
问最少跳几步可以到坐标X。
思路:
假设X是正数。
最快逼近X的方法是不停向右走。如果越过了X,假设到了X1,则必有X1-X小于最后一步d。
如果X1-X是偶数,将之前的某个x变为-x。则可以到X。
如果X1-X是奇数,因为将之前的某个x变为-x,实际是后退2x格。所以必定要再向右走一步。直到X1-X是偶数。(其实只要走一步或两步)
X是负数的情况和X是正数的情况一样。
代码:
给一个数X。
起始点为坐标0。第1步跳1格,第2步跳2格,第3步跳3格,.....以此类推。
每次可以向左跳或向右跳。
问最少跳几步可以到坐标X。
思路:
假设X是正数。
最快逼近X的方法是不停向右走。如果越过了X,假设到了X1,则必有X1-X小于最后一步d。
如果X1-X是偶数,将之前的某个x变为-x。则可以到X。
如果X1-X是奇数,因为将之前的某个x变为-x,实际是后退2x格。所以必定要再向右走一步。直到X1-X是偶数。(其实只要走一步或两步)
X是负数的情况和X是正数的情况一样。
代码:
ll x,d; int main(){ cin>>x; if(x==0){ puts("0"); return 0; } if(x<0){ x=-x; } d=1; while(d*(d+1)/2<x) ++d; if(d*(d+1)/2==x){ printf("%I64d\n",d); } else{ ll x1=d*(d+1)/2; ll deta=x1-x; if(deta%2==0){ printf("%I64d\n",d); } else{ while(deta%2!=0){ ++d; x1+=d; deta=x1-x; } printf("%I64d\n",d); } } return 0; }
相关文章推荐
- [CF 332D]Theft of Blueprints题解中数学结论证明的翻译
- CF - 797A. k-Factorization - 思维+贪心+数学
- cf 12C Fruits(贪心【简单数学】)
- CF 11B Jumping Jack
- CF 604C Alternative Thinking#贪心
- CF 490E 贪心,回溯法
- CF 557A(Ilya and Diplomas-贪心)
- 一个不等式高等数学方法证明
- CF#318-Bear and Elections-贪心暴力
- hdu 5747(数学,贪心)
- noip2014联合权值 (贪心+数学推导)
- 组合数学(Anton and School - 2,cf 785D)
- HDU5073 ACM-ICPC亚洲区域赛鞍山赛区现场赛D题 Galaxy 贪心+数学推导
- test 9 小p的单调数列 (dp+数学证明)
- cf 342B - Xenia and Spies(贪心)
- (CF 792E Colored Balls) 思维题 贪心
- 物理直觉与数学证明:凸多边形的平衡点
- hdu-1593 find a way to escape(贪心,数学)
- CodeForces CF 360E Levko and Game 贪心+SPFA
- ACM--贪心--数学--A-B Game--水